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

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

namespace app\models;

use Yii;

/**
* This is the model class for table "location".
*
* @property integer $id
* @property string $country
* @property string $city
* @property double $latitude
* @property double $longitude
* @property double $altitude
*/
class Location extends \yii\db\ActiveRecord
{
const SCENARIO_CREATE = 'create';
/**
* @inheritdoc
*/
public static function tableName()
{
return 'location';
}

/**
* @inheritdoc
*/
public function rules()
{
return [
[['country', 'city', 'latitude', 'longitude', 'altitude'], 'required'],
[['latitude', 'longitude', 'altitude'], 'number'],
[['country'], 'string', 'max' => 25],
[['city'], 'string', 'max' => 40],
];
}
public function scenarios()
{
$scenarios = parent::scenarios();
$scenarios['create'] = ['id','country','city','latitude','longitude','altitude']; //ต้องเหมือนใน database
return $scenarios;
}
/**
* @inheritdoc
*/
public function attributeLabels()
{
return [
'id' => 'ID',
'country' => 'Country',
'city' => 'City',
'latitude' => 'Latitude',
'longitude' => 'Longitude',
'altitude' => 'Altitude',
];
}
}

ขั้นตอนที่ 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 ไปแล้ว

THANK YOU …. ^+++^

credit : https://www.cloudways.com/blog/rest-api-yii2/
One clap, two clap, three clap, forty?

By clapping more or less, you can signal to us which stories really stand out.