ภาคต่อ ใช้งาน RESTful Services ฟังก์ชั่นสำหรับ POST ข้อมูล
เขียนเมื่อ 6 ปีก่อน โดย Ninenik Narkdeecodeigniter phprequests codeigniter 3 restful
คำสั่ง การ กำหนด รูปแบบ ตัวอย่าง เทคนิค ลูกเล่น การประยุกต์ การใช้งาน เกี่ยวกับ codeigniter phprequests codeigniter 3 restful
ไปที่
Copy
จากเนื้อหาตอนที่แล้วเราได้รู้จักการใช้งาน Rest Server ในการสร้าง
RESTful API สำหรับการเรียกใช้งานผ่าน HTTP GET มาแล้ว เนื้อหานี้
เราจะพูดถึงการสร้าง RESTful API สำหรับการใช้งานผ่าน HTTP POST กัน
โดยก่อนจะเข้าไปในส่วนของรายละเอียด จะขอพูดถึงส่วนของการกำหนด
และรับค่า parameter ในฟังก์ชั่น
ตัวอย่างไฟล์ News.php ในโฟลเดอร์ apps > controllers > api
จากเนื้อหาตอนที่แล้ว
<?php defined('BASEPATH') OR exit('No direct script access allowed'); require(APPPATH.'libraries/REST_Controller.php'); class News extends REST_Controller { public function index_get() { $data = array( array( "id"=>1, "topic"=>"หัวข้อข่าวที่ 1" ), array( "id"=>2, "topic"=>"หัวข้อข่าวที่ 2" ), array( "id"=>3, "topic"=>"หัวข้อข่าวที่ 3" ), ); $this->response($data, 200); // ดึงรายการข่าวทั้งหมด } }
เมื่อเรามีการเรียกดูข้อมูล โดยทำการส่ง Requests HTTP GET
มาที่ url http://localhost/learnci/api/news/index
RESTful Service ที่เราสร้างขึ้นก็จะส่งข้อมูลรายการ ข่าวทั้งหมด 3 รายการ
กลับไป แต่สมมติว่าเราต้องการข้อมูลแค่่บางรายการ เช่น ต้องการดูเฉพาะข้อมูล
รายการที่ 3 เราก็สามารถทำได้โดยการส่งค่า parameter เพิ่มเข้ามา ยกตัวอย่าง
สมมติเราส่ง id=3 เข้ามาเป็นดังนี้
http://localhost/learnci/api/news/index/?id=3
หรือ
http://localhost/learnci/api/news/index/id/3
กรณีดังกล่าวด้านบน เราสามารถใช้งานค่า parameter โดยใช้
$this->get('id'); // หากเป็นส่วนของฟังก์ชั่น GET $this->post('id'); // หากเป็นส่วนของฟังก์ชั่น POST $this->put('id'); // หากเป็นส่วนของฟังก์ชั่น PUT $this->delete('id'); // หากเป็นส่วนของฟังก์ชั่น DELETE ส่วนฟังก์ชั่นสำหรับคืนค่ากลับออกไปจะใช้ $this->response(); // เช่น $this->response($data);
เรามาลองปรับฟังก์ชั่น GET ในไฟล์ News.php กรณีร้องขอข้อมูล
บางรายการโดยส่ง id เข้ามา เป็นดังนี้
<?php defined('BASEPATH') OR exit('No direct script access allowed'); require(APPPATH.'libraries/REST_Controller.php'); class News extends REST_Controller { public function index_get() { $data = array( array( "id"=>1, "topic"=>"หัวข้อข่าวที่ 1" ), array( "id"=>2, "topic"=>"หัวข้อข่าวที่ 2" ), array( "id"=>3, "topic"=>"หัวข้อข่าวที่ 3" ), ); // รับค่า parameter กรณี้มีส่งค่าเข้ามา หรือเป็น NULL ถ้าไม่มีการส่งค่า $id = $this->get('id'); if ($id === NULL) // ถ้าไม่มีการระบุ id ที่ต้องการแสดงเข้ามา { if($data){ // ถ้ามีข้อมูล $data $this->response($data, 200); // แสดงรายการข่าวทั้งหมด }else{ // ถ้าไม่มีข้อมูล // กำหนดรูปแบบการแจ้ง เช่น สถานะและข้อความ $this->response([ 'status' => FALSE, 'message' => 'ไม่พบรายการข่าว' ], REST_Controller::HTTP_NOT_FOUND); // NOT_FOUND (404) being the HTTP response code } } else { $id = (int) $id; // ให้ id เป็นตัวเลขเท่านั้น // ถ้าแปลงเป็นตัวเลขแล้วน้อยกว่าหรือเท่ากับ 0 if ($id <= 0) { // รูปแบบ id ไม่ถูกต้อง กำหนดค่าข้อมูลกลับเป็น NULL และสถานะเเป็น 400 $this->response(NULL, REST_Controller::HTTP_BAD_REQUEST); // BAD_REQUEST (400) being the HTTP response code } $item = NULL; // สร้างตัวแปรว่างไว้รับค่าข้อมูล if (!empty($data)) // มีข้อมูล { foreach ($data as $key => $value) // วนลูปข้อมูล { // หารายการที่ id ตรง if (isset($value['id']) && $value['id'] === $id) { $item = $value; // เก็บค่าที่รายการตรง } } } $this->response($item, 200); // แสดงเฉพาะรายการ id ที่ตรงตามร้องขอเข้ามา } } }
จากโค้ดที่ปรับแต่งแล้วด้านบน สมมติเราทำการเรียกดูเฉพาะข้อมูลที่ 3 และดูในรูปแบบ
xml โดยกำหนด url เป็นดังนี้
http://localhost/learnci/api/news/index/id/3/format/xml
เราก็จะได้ข้อมูลตามรูป xml เป็น
<?xml version="1.0" encoding="utf-8"?> <xml> <id>3</id> <topic>หัวข้อข่าวที่ 3</topic> </xml>
การทำ RESTful API สำหรับ HTTP POST Request
เราจะมาลองสมมติกันว่า เราจะส่ง id กับ topic ที่ต้องการเข้าไป
เพื่อแก้ไขข้อมูล แล้วส่งกลับข้อมูลทั้งหมดออกมา เพื่อเทียบดู
เริ่มต้นเราจะใช้ code คล้ายกับส่วนของ GET ฟังก์ชั่น จะได้
ไฟล์ News.php ดังนี้
<?php defined('BASEPATH') OR exit('No direct script access allowed'); require(APPPATH.'libraries/REST_Controller.php'); class News extends REST_Controller { public function index_post() { $data = array( array( "id"=>1, "topic"=>"หัวข้อข่าวที่ 1" ), array( "id"=>2, "topic"=>"หัวข้อข่าวที่ 2" ), array( "id"=>3, "topic"=>"หัวข้อข่าวที่ 3" ), ); // รับค่า parameter กรณี้มีส่งค่าเข้ามา หรือเป็น NULL ถ้าไม่มีการส่งค่า $id = $this->post('id'); $topic = $this->post('topic'); // $this->response($this->post(), 200); if ($id === NULL) // ถ้าไม่มีการระบุ id ที่ต้องการแก้ไขส่งเข้ามา { if($data){ // ถ้ามีข้อมูล $data $this->response($data, 200); // แสดงรายการข่าวทั้งหมด }else{ // ถ้าไม่มีข้อมูล // กำหนดรูปแบบการแจ้ง เช่น สถานะและข้อความ $this->response([ 'status' => FALSE, 'message' => 'ไม่พบรายการข่าว' ], REST_Controller::HTTP_NOT_FOUND); // NOT_FOUND (404) being the HTTP response code } } else { $id = (int) $id; // ให้ id เป็นตัวเลขเท่านั้น $topic = (string) $topic; // ถ้าแปลงเป็นตัวเลขแล้วน้อยกว่าหรือเท่ากับ 0 if ($id <= 0) { // รูปแบบ id ไม่ถูกต้อง กำหนดค่าข้อมูลกลับเป็น NULL และสถานะเเป็น 400 $this->response(NULL, REST_Controller::HTTP_BAD_REQUEST); // BAD_REQUEST (400) being the HTTP response code } if (!empty($data)) // มีข้อมูล { foreach ($data as $key => $value) // วนลูปข้อมูล { // หารายการที่ id ตรง if (isset($value['id']) && $value['id'] === $id) { $data[$key]['topic']=$topic; // กำหนดค่าเป็นค่าใหม่ } } } $this->response($data, 200); // แสดงรายการทั้งหมดกลับอักครั้งหลังอัพเดท } } }
เมื่อสร้าง RESTful API สำหรับรับค่า POST แล้ว เราจะทดสอบเรียกดูข้อมูล
โดยเราจะใช้ Requests for PHP จากเนื้อหา
เรียกใช้ Requests for PHP สำหรับใช้งาน HTTP library ใน codeigniter
http://www.ninenik.com/content.php?arti_id=701 via @ninenik
จะได้เป็นไฟล์ตัวอย่างการดึงข้อมูล ดังนี้ ไฟล์ Example.php ในโฟลเดอร์ apps > controllers
<?php defined('BASEPATH') OR exit('No direct script access allowed'); class Example extends CI_Controller { public function __construct() { parent::__construct(); $this->load->library('PHPRequests'); } public function index(){ $url = 'http://localhost/learnci/api/news/index'; $headers = array('Content-Type' => 'application/json'); $data = array( 'id' => 3, 'topic'=>"ใหม่ หัวข้อข่าวที่ 3 อัพเดท" ); $response = Requests::post($url, $headers, json_encode($data)); $responseData = $response->body; // ได้ข้อมูล json กลับมา // แปลงข้อมูลกลับ และให้เป็น array $arrData = json_decode($responseData,true); echo "<pre>"; print_r($arrData); // ทดสอบแสดงข้อมูลจากตัวแปร array echo "</pre>"; } }
เมื่อเราทดสอบรันไฟล์ผ่าน url
http://localhost/learnci/example/
เราก็จะได้ผลลัพธ์โครรงสร้างของ array ดังรูปด้านล่าง
Array ( [0] => Array ( [id] => 1 [topic] => หัวข้อข่าวที่ 1 ) [1] => Array ( [id] => 2 [topic] => หัวข้อข่าวที่ 2 ) [2] => Array ( [id] => 3 [topic] => ใหม่ หัวข้อข่าวที่ 3 อัพเดท ) )
เราจะเห็นว่า รายการ id = 3 ที่เราได้ส่งข้อมูลไปทำการอัพเดท
ทำให้ค่าที่คืนกลับมาเป็นค่าตามที่เราส่งเข้าไปอัพเดทนั่นเอง
เนื้อหาเกี่ยวกับการใช้งาน Rest Server สำหรับ CodeIgniter ข้างต้นทั้งสองตอน
เป็นแนวทางเบื้องต้น ให้เราเข้าใจการใช้งานและนำไปประยุกต์เพิ่มเติม เพื่อสร้าง
RESTful API หรือเป็น web service สำหรับต่อยอดด้านอื่นๆ ได้
ส่วนการสร้าง RESTful API สำหรับ PUT และ DELETE นั้นจะไม่ขอกล่าวถึง แต่มีรูปแบบ
คล้ายกับ GET และ POST และเนื่องจาก PUT และ DELETE ไม่ค่อยนิยมใช้กันมากนัก
โดยสามารถประยุกต์ใช้ POST แทนเพื่อทำการเพิ่มข้อมูล และลบข้อมูลแทนได้
กด Like หรือ Share เป็นกำลังใจ ให้มีบทความใหม่ๆ เรื่อยๆ น่ะครับ

อ่านต่อที่บทความ
-
22 Jul2017เพิ่มความสามารถ RESTful Services ใน CodeIgniter อย่างง่าย อ่าน 6,714
เนื้อหาต่อไปนี้ จะมาแสดงตัวอย่างการใช้งาน RESTful Services ใน CodeIgniter เพิ
เนื้อหาที่เกี่ยวข้อง
-
02 May2016เรียกใช้ Requests for PHP สำหรับใช้งาน HTTP library ใน codeigniter อ่าน 6,590
เนื้อหาตอนนี้จะเป็นการแนะนำวิธีเรียกใช้งาน Requests for PHP สำหรับ ใช้งาน
-
03 May2016ใช้งาน RESTful Services ใน CodeIgniter ด้วย Rest Server อ่าน 16,966
RESTful API เป็นรูปแบบหนึ่งของบริการ การส่งผ่านข้อมูลระหว่าง server
-
กำลังอ่านเนื้อหานี้อยู่04 May2016ภาคต่อ ใช้งาน RESTful Services ฟังก์ชั่นสำหรับ POST ข้อมูล อ่าน 8,797
จากเนื้อหาตอนที่แล้วเราได้รู้จักการใช้งาน Rest Server ในการสร้าง RESTful
URL สำหรับอ้างอิง
Top
Copy
ขอบคุณทุกการสนับสนุน
![]()