Skip to main content

BASIC RESTful Web API PHP/MySQL

สวัสดีครับ วันนี้ผมจะมาแนะนำการสร้าง Rest Api เบื้องต้นกันนะครับ สำหรับใครที่ยังไม่รู้จัก

REST API อธิบายอย่างง่ายก็คือ การสร้าง Web Service ในรูปแบบหนึ่ง เพื่อให้ Application หรือ ภาษา Programing อื่น ๆ สามารถเรียกใช้ข้อมูลของเราได้ ผ่านทาง  โปรโตคอล HTTP หมายความว่าเราสามารถเข้าถึงข้อมูลได้โดยใช้  URL  Web Site ได้นั้นเอง

เครื่องมือที่ใช้งานบทความนี้

  1. Xampp สำหรับใช้ Run PHP/MySQL
  2. Text Editor สำหรับเขียน Code เช่น VS CODE , Sublime Text , Notepad++
  3. 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 เบื้องต้น หากมีข้อผิดพลาด ประการใด ต้องอภัยไว้ ณ ที่นี้ด้วยครับ

ขอบคุณครับ

 


Deprecated: Function create_function() is deprecated in /home/service1/domains/monkeywebstudio.com/public_html/wp-content/plugins/simple-lightbox/controller.php on line 1642