การส่งค่า Parameter ผ่าน URL (GET)
ในบทที่แล้ว เราได้สร้าง API อย่างง่ายที่ส่งข้อความ "Hello, API World!" กลับไป ในบทนี้ เราจะเรียนรู้วิธีการส่งค่าจาก Client มายัง API ของเราผ่านทาง URL โดยใช้สิ่งที่เรียกว่า "Parameter" และวิธีการเข้าถึง Parameter เหล่านั้นใน PHP โดยใช้ `$_GET`
Parameter คืออะไร?
Parameter คือข้อมูลเพิ่มเติมที่เราส่งไปพร้อมกับ URL เพื่อบอกให้ API รู้ว่าเราต้องการอะไร หรือต้องการข้อมูลอะไร ตัวอย่างเช่น ถ้าเราต้องการดึงข้อมูลผู้ใช้ที่มี ID เท่ากับ 1 เราอาจจะส่ง ID นั้นเป็น Parameter ใน URL ดังนี้:
http://example.com/api/users?id=1
ใน URL นี้ id=1 คือ Parameter โดยที่ id คือชื่อของ Parameter และ 1 คือค่าของ Parameter เราสามารถส่ง Parameter ได้หลายตัวโดยคั่นด้วยเครื่องหมาย & เช่น:
http://example.com/api/products?category=electronics&price=100
ใน URL นี้ เราส่ง Parameter สองตัวคือ category ที่มีค่าเป็น electronics และ price ที่มีค่าเป็น 100
HTTP Method GET คืออะไร?
ก่อนที่เราจะไปต่อ เรามาทบทวนเรื่อง HTTP Method กันสักเล็กน้อย ในบทที่ 3 เราได้กล่าวถึง HTTP Methods ต่างๆ ซึ่ง `GET` เป็นหนึ่งในนั้น และเป็น Method ที่เราจะใช้ในการส่ง Parameter ผ่าน URL
GET Method ใช้สำหรับดึงข้อมูลจาก Server โดยปกติแล้ว การส่ง Parameter ผ่าน URL จะใช้กับ `GET` Method เนื่องจาก `GET` Method ถูกออกแบบมาให้ใช้ในการดึงข้อมูลโดยระบุเงื่อนไขผ่าน Parameter ใน URL
การใช้ $_GET ใน PHP
ใน PHP เราสามารถเข้าถึง Parameter ที่ส่งมาผ่าน URL ได้โดยใช้ตัวแปร Superglobal ที่ชื่อว่า $_GET ซึ่งเป็น Array ที่เก็บ Parameter ทั้งหมดในรูปแบบของ Key-Value Pair โดยที่ Key คือชื่อของ Parameter และ Value คือค่าของ Parameter
ตัวอย่างเช่น ถ้าเรามี URL ดังนี้:
http://example.com/api/users?name=John&age=30
ใน PHP เราสามารถเข้าถึงค่าของ Parameter name และ age ได้ดังนี้:
<?php
$name = $_GET['name'];
$age = $_GET['age'];
echo "Name: " . $name . "<br>";
echo "Age: " . $age . "<br>";
?>
เมื่อรัน Code นี้ จะได้ผลลัพธ์ดังนี้:
Name: John<br>Age: 30
การตรวจสอบค่า Parameter
สิ่งสำคัญที่ต้องทำก่อนที่จะนำค่า Parameter ไปใช้คือการตรวจสอบว่า Parameter นั้นมีอยู่จริงหรือไม่ และมีค่าที่ถูกต้องหรือไม่ เพราะถ้าเราพยายามเข้าถึง Parameter ที่ไม่มีอยู่ จะทำให้เกิด Error ได้
เราสามารถตรวจสอบว่า Parameter มีอยู่จริงหรือไม่โดยใช้ฟังก์ชัน isset() ใน PHP:
<?php
if (isset($_GET['name'])) {
$name = $_GET['name'];
echo "Name: " . $name . "<br>";
} else {
echo "Name parameter is missing.<br>";
}
?>
Code นี้จะตรวจสอบว่า Parameter name มีอยู่หรือไม่ ถ้ามีอยู่ ก็จะแสดงค่าของ name ถ้าไม่มีอยู่ ก็จะแสดงข้อความว่า "Name parameter is missing."
นอกจากนี้ เรายังควรตรวจสอบว่าค่าของ Parameter นั้นถูกต้องตามที่เราต้องการหรือไม่ ตัวอย่างเช่น ถ้าเราต้องการให้ Parameter age เป็นตัวเลข เราสามารถตรวจสอบได้ดังนี้:
<?php
if (isset($_GET['age']) && is_numeric($_GET['age'])) {
$age = $_GET['age'];
echo "Age: " . $age . "<br>";
} else {
echo "Age parameter is missing or invalid.<br>";
}
?>
Code นี้จะตรวจสอบว่า Parameter age มีอยู่หรือไม่ และเป็นตัวเลขหรือไม่ ถ้ามีอยู่และเป็นตัวเลข ก็จะแสดงค่าของ age ถ้าไม่มีอยู่ หรือไม่เป็นตัวเลข ก็จะแสดงข้อความว่า "Age parameter is missing or invalid."
ตัวอย่างการใช้งานจริง: API ดึงข้อมูลผู้ใช้
ลองมาดูตัวอย่างการใช้งานจริงในการสร้าง API ที่ดึงข้อมูลผู้ใช้ตาม ID ที่ส่งมาผ่าน URL
สมมติว่าเรามีข้อมูลผู้ใช้เก็บอยู่ใน Array ดังนี้:
<?php
$users = [
1 => ['name' => 'John', 'age' => 30],
2 => ['name' => 'Jane', 'age' => 25],
3 => ['name' => 'Peter', 'age' => 40]
];
?>
เราสามารถสร้าง API ที่ดึงข้อมูลผู้ใช้ตาม ID ได้ดังนี้:
<?php
$users = [
1 => ['name' => 'John', 'age' => 30],
2 => ['name' => 'Jane', 'age' => 25],
3 => ['name' => 'Peter', 'age' => 40]
];
header('Content-Type: application/json'); // บอก Client ว่าเราจะส่ง JSON กลับไป
if (isset($_GET['id']) && is_numeric($_GET['id'])) {
$id = $_GET['id'];
if (isset($users[$id])) {
$user = $users[$id];
$response = ['status' => 'success', 'data' => $user];
} else {
$response = ['status' => 'error', 'message' => 'User not found.'];
}
} else {
$response = ['status' => 'error', 'message' => 'Invalid user ID.'];
}
echo json_encode($response);
?>
Code นี้จะทำงานดังนี้:
- กำหนด Array
$usersที่เก็บข้อมูลผู้ใช้ - ตั้งค่า Header เป็น
application/jsonเพื่อบอก Client ว่าเราจะส่ง JSON กลับไป - ตรวจสอบว่า Parameter
idมีอยู่หรือไม่ และเป็นตัวเลขหรือไม่ - ถ้า
idมีอยู่และเป็นตัวเลข จะตรวจสอบว่ามีผู้ใช้ที่มี ID ตรงกับ$idหรือไม่ - ถ้ามีผู้ใช้ที่มี ID ตรงกับ
$idจะสร้าง Array$responseที่มีstatusเป็นsuccessและdataเป็นข้อมูลของผู้ใช้ - ถ้าไม่มีผู้ใช้ที่มี ID ตรงกับ
$idจะสร้าง Array$responseที่มีstatusเป็นerrorและmessageเป็น "User not found." - ถ้า
idไม่มีอยู่ หรือไม่เป็นตัวเลข จะสร้าง Array$responseที่มีstatusเป็นerrorและmessageเป็น "Invalid user ID." - แปลง Array
$responseเป็น JSON String ด้วยฟังก์ชันjson_encode() - ส่ง JSON String กลับไป
ถ้าเราเรียก API นี้ด้วย URL http://example.com/api/users?id=1 จะได้ผลลัพธ์เป็น JSON ดังนี้:
{
"status": "success",
"data": {
"name": "John",
"age": 30
}
}
ถ้าเราเรียก API นี้ด้วย URL http://example.com/api/users?id=4 จะได้ผลลัพธ์เป็น JSON ดังนี้:
{
"status": "error",
"message": "User not found."
}
ถ้าเราเรียก API นี้ด้วย URL http://example.com/api/users?id=abc จะได้ผลลัพธ์เป็น JSON ดังนี้:
{
"status": "error",
"message": "Invalid user ID."
}
สรุป
ในบทนี้ เราได้เรียนรู้วิธีการส่งค่า Parameter ผ่าน URL โดยใช้ `GET` Method และวิธีการเข้าถึง Parameter เหล่านั้นใน PHP โดยใช้ $_GET นอกจากนี้ เรายังได้เรียนรู้วิธีการตรวจสอบค่า Parameter เพื่อป้องกัน Error และวิธีการนำไปประยุกต์ใช้ในการสร้าง API ที่ดึงข้อมูลผู้ใช้ตาม ID
ในบทต่อไป เราจะเรียนรู้วิธีการรับข้อมูลจาก Form โดยใช้ `POST` Method ซึ่งเป็นอีกวิธีหนึ่งในการส่งข้อมูลจาก Client มายัง API ของเรา