สวัสดีครับ วันนี้ผมจะมาแนะนำการสร้าง Rest Api เบื้องต้นกันนะครับ สำหรับใครที่ยังไม่รู้จัก
REST API อธิบายอย่างง่ายก็คือ การสร้าง Web Service ในรูปแบบหนึ่ง เพื่อให้ Application หรือ ภาษา Programing อื่น ๆ สามารถเรียกใช้ข้อมูลของเราได้ ผ่านทาง โปรโตคอล HTTP หมายความว่าเราสามารถเข้าถึงข้อมูลได้โดยใช้ URL Web Site ได้นั้นเอง
เครื่องมือที่ใช้งานบทความนี้
- Xampp สำหรับใช้ Run PHP/MySQL
- Text Editor สำหรับเขียน Code เช่น VS CODE , Sublime Text , Notepad++
- Post Man ใช้สำหรับเรียกใช้งาน Web Service
มาเริ่มกันเลย
ก่อนอื่นเรามาสร้าง ฐานข้อมูลกันก่อน ตัวอย่างจะสร้าง Database ชื่อ users_database และ สร้างตาราง ชื่อ employees สำหรับเก็บข้อมูลพนักงาน ดังนี้
สร้าง Database users_database
CREATE DATABASE users_database;
สร้าง Table employees สำหรับเก็บข้อมูลพนักงาน
CREATE TABLE `employees` ( `id` int(11) NOT NULL AUTO_INCREMENT, `first_name` varchar(255) CHARACTER SET latin1 DEFAULT NULL, `last_name` varchar(255) CHARACTER SET latin1 DEFAULT NULL, `email_address` varchar(255) CHARACTER SET latin1 DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
จากนั้นใส่ข้อมูลตัวอย่างดังนี้
insert into employees (id, first_name, last_name, email_address) values (1, 'Carlyle', 'Onians', 'conians0@scribd.com'); insert into employees (id, first_name, last_name, email_address) values (2, 'Eb', 'Powland', 'epowland1@list-manage.com'); insert into employees (id, first_name, last_name, email_address) values (3, 'Tanhya', 'Madison', 'tmadison2@msu.edu'); insert into employees (id, first_name, last_name, email_address) values (4, 'Maurine', 'Nuscha', 'mnuscha3@diigo.com'); insert into employees (id, first_name, last_name, email_address) values (5, 'Cosette', 'Ducket', 'cducket4@pbs.org');
มาดูวิธีการเรียกใช้งาน API ที่เราจะสร้าง โดยมีรูปแบบดังนี้ครับ
Method | Full URL | |
GET | http://localhost/api/employee.php | ดูข้อมูลทั้งหมด |
GET | http://localhost/api/employee.php?id={id} | ดูข้อมููลจาก id ที่ส่งมา |
POST | http://localhost/api/employee.php | เพิ่มข้อมูล |
PUT | http://localhost/api/employee.php?id={id} | แก้ไขข้อมูล จาก id ที่ส่งมา |
DELETE | http://localhost/api/employee.php?id={id} | ลบข้อมูล จาก id ที่ส่งมา |
สร้างไฟล์ C:/xampp/htdocs/api/employee.php
ตัวอย่าง Code การเรียกดูข้อมูลทั้งหมด หรือ เรียกดูตามค่า id ที่ส่งมา
<?php //กำหนดค่า Access-Control-Allow-Origin ให้ เครื่อง อื่น ๆ สามารถเรียกใช้งานหน้านี้ได้ header("Access-Control-Allow-Origin: *"); header("Content-Type: application/json; charset=UTF-8"); header("Access-Control-Allow-Methods: OPTIONS,GET,POST,PUT,DELETE"); header("Access-Control-Max-Age: 3600"); header("Access-Control-Allow-Headers: Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With"); //ตั้งค่าการเชื่อมต่อฐานข้อมูล $link = mysqli_connect('localhost', 'root', '123456', 'users_database'); mysqli_set_charset($link, 'utf8'); $requestMethod = $_SERVER["REQUEST_METHOD"]; //ตรวจสอบหากใช้ Method GET if($requestMethod == 'GET'){ //ตรวจสอบการส่งค่า id if(isset($_GET['id']) && !empty($_GET['id'])){ $id = $_GET['id']; //คำสั่ง SQL กรณี มีการส่งค่า id มาให้แสดงเฉพาะข้อมูลของ id นั้น $sql = "SELECT * FROM employees WHERE id = $id"; }else{ //คำสั่ง SQL แสดงข้อมูลทั้งหมด $sql = "SELECT * FROM employees"; } $result = mysqli_query($link, $sql); //สร้างตัวแปร array สำหรับเก็บข้อมูลที่ได้ $arr = array(); while ($row = mysqli_fetch_assoc($result)) { $arr[] = $row; } echo json_encode($arr); }
เมื่อลองเรียก URL : http://localhost/api/employee.php ด้วย POST MAN จะแสดงข้อมูลทั้งหมดตามภาพ
เมื่อลองเรียก URL : http://localhost/api/employee.php?id=2 ด้วย POST MAN โดยครั้งนี้มีการส่งค่า id=2 ไปด้วย
จะแสดงข้อมูลเฉพาะข้อมูลที่มี id เป็น 2 ตามภาพ
ต่อมาเรามีเขียนการเพิ่มข้อมูลด้วย Method POST สำหรับการเพิ่มข้อมูล กันต่อ แก้ไฟล์ employee.php ต่อ
//อ่านข้อมูลที่ส่งมาแล้วเก็บไว้ที่ตัวแปร data $data = file_get_contents("php://input"); //แปลงข้อมูลที่อ่านได้ เป็น array แล้วเก็บไว้ที่ตัวแปร result $result = json_decode($data,true); //ตรวจสอบการเรียกใช้งานว่าเป็น Method POST หรือไม่ if($requestMethod == 'POST'){ if(!empty($result)){ $firstName = $result['first_name']; $lastName = $result['last_name']; $emailAddress = $result['email_address']; //คำสั่ง SQL สำหรับเพิ่มข้อมูลใน Database $sql = "INSERT INTO employees (id,first_name,last_name,email_address) VALUES (NULL,'$firstName','$lastName','$emailAddress')"; $result = mysqli_query($link, $sql); if ($result) { echo json_encode(['status' => 'ok','message' => 'Insert Data Complete']); } else { echo json_encode(['status' => 'error','message' => 'Error']); } } }
เมื่อเรียก URL : http://localhost/api/employee.php ด้วย POST MAN แต่ครั้งนี้เราจะใช้ Method POST และ จะมีการส่งข้อมูลที่ต้องการเพิ่มไปด้วย เมื่อกด Send จะได้ผลลัพธ์ ดังภาพ
ต่อมาเรามีเขียน CODE การแก้ไขข้อมูลด้วย Method PUT แก้ไฟล์ employee.php ต่อ
//ตรวจสอบการเรียกใช้งานว่าเป็น Method PUT หรือไม่ if($requestMethod == 'PUT'){ //ตรวจสอบว่ามีการส่งค่า id มาหรือไม่ if(isset($_GET['id']) && !empty($_GET['id'])){ $id = $_GET['id']; $firstName = $result['first_name']; $lastName = $result['last_name']; $emailAddress = $result['email_address']; //คำสั่ง SQL สำหรับแก้ไขข้อมูลใน Database โดยจะแก้ไขเฉพาะข้อมูลตามค่า id ที่ส่งมา $sql = "UPDATE employees SET first_name = '$firstName' , last_name = '$lastName' , email_address = '$emailAddress' WHERE id = $id"; $result = mysqli_query($link, $sql); if ($result) { echo json_encode(['status' => 'ok','message' => 'Update Data Complete']); } else { echo json_encode(['status' => 'error','message' => 'Error']); } } }
เมื่อเรียก URL : http://localhost/api/employee.php?id=5 ด้วย POST MAN ครั้งนี้เราจะใช้ Method PUT และ จะมีการส่งข้อมูลที่ต้องการแก้ไขไปด้วย โดยจะแก้ไขข้อมูลเฉพาะที่มี id ตรงกับค่า id ที่ส่งมาเท่านั้น
เมื่อกด Send จะได้ผลลัพธ์ ดังภาพ
สำหรับ กรณีสุดท้ายที่เราจะเขียน CODE กัน คือ การลบข้อมูลโดยใช้ HTTP Method DELETE
//ตรวจสอบการเรียกใช้งานว่าเป็น Method DELETE หรือไม่ if($requestMethod == 'DELETE'){ //ตรวจสอบว่ามีการส่งค่า id มาหรือไม่ if(isset($_GET['id']) && !empty($_GET['id'])){ $id = $_GET['id']; //คำสั่ง SQL สำหรับลบข้อมูลใน Database ตามค่า id ที่ส่งมา $sql = "DELETE FROM employees WHERE id = $id"; $result = mysqli_query($link, $sql); if ($result) { echo json_encode(['status' => 'ok','message' => 'Delete Data Complete']); } else { echo json_encode(['status' => 'error','message' => 'Error']); } } }
เมื่อเรียก URL : http://localhost/api/employee.php?id=5 ด้วย POST MAN ครั้งนี้เราจะใช้ Method DELETE
เมื่อกด Send จะมีการลบข้อมูลที่มี id เป็น 5 จะได้ผลลัพธ์ ดังภาพ
สำหรับไฟล์ ตัวอย่าง CODE ทั้งหมดดังนี้ครับ
<?php //กำหนดค่า Access-Control-Allow-Origin ให้ เครื่อง อื่น ๆ สามารถเรียกใช้งานหน้านี้ได้ header("Access-Control-Allow-Origin: *"); header("Content-Type: application/json; charset=UTF-8"); header("Access-Control-Allow-Methods: OPTIONS,GET,POST,PUT,DELETE"); header("Access-Control-Max-Age: 3600"); header("Access-Control-Allow-Headers: Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With"); //ตั้งค่าการเชื่อมต่อฐานข้อมูล $link = mysqli_connect('localhost', 'root', '123456', 'users_database'); mysqli_set_charset($link, 'utf8'); $requestMethod = $_SERVER["REQUEST_METHOD"]; //ตรวจสอบหากใช้ Method GET if($requestMethod == 'GET'){ //ตรวจสอบการส่งค่า id if(isset($_GET['id']) && !empty($_GET['id'])){ $id = $_GET['id']; //คำสั่ง SQL กรณี มีการส่งค่า id มาให้แสดงเฉพาะข้อมูลของ id นั้น $sql = "SELECT * FROM employees WHERE id = $id"; }else{ //คำสั่ง SQL แสดงข้อมูลทั้งหมด $sql = "SELECT * FROM employees"; } $result = mysqli_query($link, $sql); //สร้างตัวแปร array สำหรับเก็บข้อมูลที่ได้ $arr = array(); while ($row = mysqli_fetch_assoc($result)) { $arr[] = $row; } echo json_encode($arr); } //อ่านข้อมูลที่ส่งมาแล้วเก็บไว้ที่ตัวแปร data $data = file_get_contents("php://input"); //แปลงข้อมูลที่อ่านได้ เป็น array แล้วเก็บไว้ที่ตัวแปร result $result = json_decode($data,true); //ตรวจสอบการเรียกใช้งานว่าเป็น Method POST หรือไม่ if($requestMethod == 'POST'){ if(!empty($result)){ $firstName = $result['first_name']; $lastName = $result['last_name']; $emailAddress = $result['email_address']; //คำสั่ง SQL สำหรับเพิ่มข้อมูลใน Database $sql = "INSERT INTO employees (id,first_name,last_name,email_address) VALUES (NULL,'$firstName','$lastName','$emailAddress')"; $result = mysqli_query($link, $sql); if ($result) { echo json_encode(['status' => 'ok','message' => 'Insert Data Complete']); } else { echo json_encode(['status' => 'error','message' => 'Error']); } } } //ตรวจสอบการเรียกใช้งานว่าเป็น Method PUT หรือไม่ if($requestMethod == 'PUT'){ //ตรวจสอบว่ามีการส่งค่า id มาหรือไม่ if(isset($_GET['id']) && !empty($_GET['id'])){ $id = $_GET['id']; $firstName = $result['first_name']; $lastName = $result['last_name']; $emailAddress = $result['email_address']; //คำสั่ง SQL สำหรับแก้ไขข้อมูลใน Database โดยจะแก้ไขเฉพาะข้อมูลตามค่า id ที่ส่งมา $sql = "UPDATE employees SET first_name = '$firstName' , last_name = '$lastName' , email_address = '$emailAddress' WHERE id = $id"; $result = mysqli_query($link, $sql); if ($result) { echo json_encode(['status' => 'ok','message' => 'Update Data Complete']); } else { echo json_encode(['status' => 'error','message' => 'Error']); } } } //ตรวจสอบการเรียกใช้งานว่าเป็น Method DELETE หรือไม่ if($requestMethod == 'DELETE'){ //ตรวจสอบว่ามีการส่งค่า id มาหรือไม่ if(isset($_GET['id']) && !empty($_GET['id'])){ $id = $_GET['id']; //คำสั่ง SQL สำหรับลบข้อมูลใน Database ตามค่า id ที่ส่งมา $sql = "DELETE FROM employees WHERE id = $id"; $result = mysqli_query($link, $sql); if ($result) { echo json_encode(['status' => 'ok','message' => 'Delete Data Complete']); } else { echo json_encode(['status' => 'error','message' => 'Error']); } } }
สำหรับบทความนี้เป็นการแนะนำการใช้งาน Rest API เบื้องต้น หากมีข้อผิดพลาด ประการใด ต้องอภัยไว้ ณ ที่นี้ด้วยครับ
ขอบคุณครับ