วิธีการแชร์ข้อมูลด้วย(Rest API+Security) โดย implement API ด้วย verb(POST,PUT,GET,DELETE)

kanitta kp
Jul 29, 2017 · 5 min read

BY KADDARK NEWFANY VARAWIBWUB CHEESECAKE PIZZAVAMPIRE

RESTful API คืออะไร

เอาไว้สร้าง Web Service แบบเรียบง่าย โดยเรียกใช้ผ่านทาง HTTP Method GET / POST / PUT / DELETE และส่งข้อมูลออกมาในรูปของ XML หรือแบบ JSON ทำให้ปริมาณข้อมูลที่รับส่ง น้อยกว่าการใช้ Protocol SOAP อยู่มาก

credit : (http://www.siamhttp.com/site/article/restful-web-service.html)

ภาพจากสไลด์วิชา 322433

ประโยชน์ของ RESTful API

— ทำการอยู่บน HTTP และทำตามมาตรฐานของ HTTP จึงทำให้พัฒนาได้ง่าย
— สนับสนุนรูปแบบข้อมูลมากมาย เช่น XML, JSON, Plain Text และอื่น ๆ อีกมากมาย
— รองรับเรื่อง caching ข้อมูล
— รองรับการขยายระบบได้ง่าย
— Stateless ทำงานโดยไม่ต้องมี session

ขั้นตอนที่ 1 คือ

การสร้าง Database ขึ้นมา สามารถดาวโหลดได้ที่ https://raw.githubusercontent.com/bahar/WorldCityLocations/master/World_Cities_Location_table.sql นำโค๊ดทั้งหมดในเว็บนี้ไปใส่ notepad ตั้งชื่อ location.sql แล้วทำการ import เข้า http://localhost/phpmyadmin

ตั้งชื่อดังภาพ เลือก All files และเลือก Encoding : UTF-8 ด้วย
จะได้ไฟล์ location.sql

หลังจากได้ DB มาแล้ว ทำการ import database เข้าไป

ตั้งชื่อ location และเลือก utf8_unicode_ci กด create
เลือกไฟล์ location.sql แล้วกด go เพื่อ import DB

ขั้นตอนที่ 2 คือ

อย่าลืม !!! เปลี่ยน database นะ ในโฟลเดอร์ config ไฟล์ db.php เปลี่ยน database เป็น location ด้วย

dbname=location;

สร้าง model โดยใช้ gii generator เพื่อให้ง่ายต่อการทำควรทำ pretty url ก่อน ตามเว็บ http://dixonsatit.github.io/2014/11/30/modrewrite.html นี้เลย

เปิดหน้า localhost/ชื่อโปรเจค/web/gii จะได้หน้า Gii กด start ตรง Model Generator
พิมพ์ ตามรูป แล้วกด preview กด generate
จะได้ models Location มา

ในไฟล์ models : Location.php เพิ่มคำสั่ง

const SCENARIO_CREATE = ‘create’;

public function scenarios()
{
$scenarios = parent::scenarios();
$scenarios[‘create’] = [‘id’,’country’,’city’,’latitude’,’longitude’,’altitude’]; //ต้องเหมือนใน database
return $scenarios;
}

จะได้ไฟล์ Location.php ดังนี้

<?php

ขั้นตอนที่ 3 คือ สร้าง controller สำหรับจัดการ

เลือก Controller Generator กด start

เพิ่มคำสั่งในไฟล์ LocationController.php ดังนี้

<?php

namespace app\controllers;

use app\models\Location;
use yii\filters\ContentNegotiator;
use yii\rest\ActiveController;
use yii\web\Response;

class LocationController extends ActiveController
{
public $enableCsrfValidation = false;

public function behaviors()
{
return [
[
'class' => ContentNegotiator::className(),
'only' => ['index', 'view'],
'formats' => [
'application/json' => Response::FORMAT_JSON,
],
],
];
}

public $modelClass = 'app\models\Location';
public $serializer = [
'class' => 'yii\rest\Serializer',
'collectionEnvelope' => 'items',
];

public function actionPost() //create
{
\Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;
$location = new Location();
$location->scenario = Location::SCENARIO_CREATE;
$location->attributes = \yii::$app->request->post();
if ($location->validate()) {
$location->save();
return array('status' => true, 'data' => 'Record is successfully updated');
} else {
return array('status' => false, 'data' => $location->getErrors());
}
}

public function actionGet()
{
\Yii::$app->response->format = \yii\web\Response:: FORMAT_JSON;
$location = Location::find()->all();
if (count($location) > 0) {
return array('status' => true, 'data' => $location);
} else {
return array('status' => false, 'data' => 'No Location Found');
}
}

public function actionPut()
{
\Yii::$app->response->format = \yii\web\Response:: FORMAT_JSON;
$attributes = \yii::$app->request->post();
$location = Location::find()->where(['ID' => $attributes['id']])->one();
if (count($location) > 0) {
$location->attributes = \yii::$app->request->post();
$location->save();
return array('status' => true, 'data' => 'Location record is updated successfully');
} else {
return array('status' => false, 'data' => 'No Location Found');
}
}
public function actionDeleteRoll()
{
\Yii::$app->response->format = \yii\web\Response:: FORMAT_JSON;
$attributes = \yii::$app->request->post();
$location = Location::find()->where(['ID' => $attributes['id']])->one();
if (count($location) > 0) {
$location->delete();
return array('status' => true, 'data' => 'Location record is successfully deleted');
} else {
return array('status' => false, 'data' => 'No Location Found');
}
}


}

หลังจากนั้นเพิ่มคำสั่งเปิดการใช้งานเพื่อรับค่าที่อยู่ในรูปแบบของ Jsonใน ไฟล์ web.php ในโฟลเดอร์ config

'parsers' => [
'application/json' => 'yii\web\JsonParser',
]

และอีกอย่างที่สำคัญคือลงตัวช่วยการแสดงผล json

สามารถทดสอบได้โดยการใส่ URL :

localhost/ชื่อโปรเจค/web/location

เช่นในตัวอย่างเป็น localhost/restapi/web/location

ขั้นตอนที่ 4

โหลดตัวช่วย Postman ช่วยทดสอบ API ว่าทำงานได้หรือไม่

สะดวกมากใช้ผ่าน chrome ได้เลยกดติดตั้งแล้วเปิดแอพขึ้นมาเลย

กดลงโปรแกรมและเปิดโปรแกรมแล้วลงชื่อด้วย gmail ได้เลย
หน้าตา postman

ขั้นตอนที่ 5 เริ่มใช้ postman กันเล๊ยยยย :]

GET

โดยใส่ URL: localhost/restapi/web/location เพื่อเรียก method get ใน controller ลงไปแล้วเลือกด้านหน้าในวงสีแดงเป็น get ด้วยนะ แล้วกด send ก็จะเป็นการ select ค่าทั้งหมดในตาราง location มาแสดงเป็น json ด้านล่าง

ถ้าใส่ต้องการค้นหาเฉพาะ id ก็ใส่ URL: localhost/restapi/web/location/1

POST

โดยใส่ URL : localhost/restapi/web/location/post

เลือก POST ด้านหน้า URL แล้วเพิ่ม attributes ตามตารางเติม value แล้วกดsend จะขึ้นว่าบันทึกแล้ว หรือตรวจสอบโดยเรียก

localhost/restapi/web/location/ 165486

PUT หรือ UPDATE นั่นเอง

เมื่อกด send แล้วจะแสดงข้อความนี้ แสดงว่าได้ทำการบันทึกแล้ว
เมื่อลอง get ค่าดูว่าข้อมูลเปลี่ยนหรือไม่

DELETE

พิมพ์ URL: localhost/restapi/web/location/delete-roll และเลือก delete ที่ด้านหน้า URL กด SEND และส่งค่า id ไป
เมื่อกดค้นหาจะไม่เจอตัวที่ delete ไปแล้ว

    kanitta kp

    Written by

    Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
    Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
    Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade