ใช้งาน RESTful Services ใน CodeIgniter ด้วย Rest Server

เขียนเมื่อ 8 ปีก่อน โดย Ninenik Narkdee
phprequests restful codeigniter codeigniter 3

คำสั่ง การ กำหนด รูปแบบ ตัวอย่าง เทคนิค ลูกเล่น การประยุกต์ การใช้งาน เกี่ยวกับ phprequests restful codeigniter codeigniter 3

ดูแล้ว 20,135 ครั้ง


RESTful API เป็นรูปแบบหนึ่งของบริการ การส่งผ่านข้อมูลระหว่าง server 
หรือ web application นิยมใช้เป็น web service เช่น
ให้บริการข้อมูลบางรายการที่มีการร้องขอด้วย HTTP GET 
สร้างรายการข้อมูลใหม่ด้วย HTTP POST 
อัพเดทรายการข้อมูลที่ร้องขอโดยส่งค่า parameter เข้ามาอัพเดท ด้วย HTTP PUT
หรือลบรายการข้อมูลด้วย  HTTP DELETE
 
เนื่องจากเนื้อหาส่วนนี้ค่อนข้างยาว จะขอทำเป็นหลายบทความ
 

ก่อนอื่นตรวจสอบความต้องการของระบบก่อนว่า มีสองส่วนนี้รองรับหรือยัง

รันด้วย PHP 5.4 ขึ้นไป
ใช้งานกับ CodeIgniter 3.0 ขึ้นไป
 

การติดตั้ง Rest Server ใน codeigniter

แล้วกดปุ่มดาวน์โหลด Download ZIP
จากนั้นทำการแตกไฟล์ แล้ว copy ไฟล์ตามนี้
- application/libraries/Format.php 
- application/libraries/REST_Controller.php
มาไว้ในโฟลเดอร์ apps > libraries ของ project codeigniter
 
- application/config/rest.php
มาไว้ในโฟลเดอร์ apps > config ของ project codeigniter 
 
- application/language/enlisgh/rest_controller_lang.php
มาไว้ในโฟลเดอร์ apps > language > english ของ project codeigniter 
 

ตัวอย่างและรูปแบบการใช้งาน

ในที่นี้เราจะสร้างโฟลเดอร์ชื่อ api ใน apps > controllers
และสร้างไฟล์ controller ด้านในชื่อ News.php
 apps > controllers > api > News.php
สมมติว่าเราจะทำ REST API เกี่ยวกับข่าว จะได้ไฟล์ 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_get()
    {
        // ดึงรายการข่าวทั้งหมด
    }

    public function index_post()
    {
        // สร้างรายการข่าวใหม่
    }

    public function index_put()
    {
        // แก้ไขรายการข่าว
    }

    public function index_delete()
    {
        // ลบรายการข่าว
    }
}
 
 
ลองสมมติเราทำส่วนของ GET กันดู ให้ข้อมูลข่าวเราเป็นดังนี้
 
<?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);
        // แสดงรายการข่าวทั้งหมด
    }

}
 
เมื่อเราทดสอบเรียกดูข้อมูลแบบ GET โดยลองเรียกดูข้อมูลอย่างง่ายผ่าน url
http://localhost/learnci/api/news/
เราก็จะได้ข้อมูลออกมาในรูปแบบ json ดังนี้
 
[{"id":1,"topic":"\u0e2b\u0e31\u0e27\u0e02\u0e49\u0e2d\u0e02\u0e48\u0e32\u0e27\u0e17\u0e35\u0e48 1"},
{"id":2,"topic":"\u0e2b\u0e31\u0e27\u0e02\u0e49\u0e2d\u0e02\u0e48\u0e32\u0e27\u0e17\u0e35\u0e48 2"},
{"id":3,"topic":"\u0e2b\u0e31\u0e27\u0e02\u0e49\u0e2d\u0e02\u0e48\u0e32\u0e27\u0e17\u0e35\u0e48 3"}]
 
 
 (รูปแบบ json เป็นค่าเริ่มตั้นเราสามารถกำหนด format
ที่ต้องการได้เป็น json , xml , csv , html , php และ serialize)
แต่ส่วนใหญ่แล้วเราจะใช้เป็น json และ xml
 
ตัวอย่าง url การเรียกแสดง format ตามตั้งการ จะเป็น 
http://localhost/learnci/api/news/index/format/xml
http://localhost/learnci/api/news/index/format/json * ค่าเริ่มต้น ไม่ต้องกำหนด format ก็ได้
 
ตัวอย่างรูปแบบ xml เมื่อเรียกผ่าน url 
http://localhost/learnci/api/news/index/format/xml
 
<? xml version = "1.0" encoding = "utf-8"?>
<xml>
    <item>
        <id>1</id>
        <topic>หัวข้อข่าวที่ 1</topic>
    </item>
    <item>
        <id>2</id>
        <topic>หัวข้อข่าวที่ 2</topic>
    </item>
    <item>
        <id>3</id>
        <topic>หัวข้อข่าวที่ 3</topic>
    </item>
</xml>
 
 
เราจะเห็นว่าตรง url จะมีคำว่า /index/ ตรงนี้คือชื่อฟังก์ชั่น จากตัวอย่างของเราเป็น index_get
เราจะใช้แค่ index หรือข้อความก่อน _get มาเป็นชื่อฟังก์ชั่น
ซึ่งปกติ ถ้าเป็นชื่อว่า index เราไม่จำเป็นต้องกำหนดก็ได้ กรณีที่ไม่มีค่าอื่นเพิ่มติม
นั่นก็คือ 
http://localhost/learnci/api/news/ เท่ากับ http://localhost/learnci/api/news/index/
 
 
ทีนี้เราทดสอบเรียกดูข้อมูล โดยเราจะใช้ Requests for PHP จากเนื้อหาตอนที่แล้ว
 
เรียกใช้ Requests for PHP สำหรับใช้งาน HTTP library ใน codeigniter 
 
จะได้เป็นไฟล์ตัวอย่างการดึงข้อมูล ดังนี้ ไฟล์ 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(){
        $response = Requests::get('http://localhost/learnci/api/news/');
        $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
        )

)
 
เนื้อหาตอนหน้า จะต่อในเรื่องของการสร้าง RESTful API สำหรับการ POST 


กด Like หรือ Share เป็นกำลังใจ ให้มีบทความใหม่ๆ เรื่อยๆ น่ะครับ



อ่านต่อที่บทความ









เนื้อหาที่เกี่ยวข้อง









URL สำหรับอ้างอิง





คำแนะนำ และการใช้งาน

สมาชิก กรุณา ล็อกอินเข้าระบบ เพื่อตั้งคำถามใหม่ หรือ ตอบคำถาม สมาชิกใหม่ สมัครสมาชิกได้ที่ สมัครสมาชิก


  • ถาม-ตอบ กรุณา ล็อกอินเข้าระบบ
  • เปลี่ยน


    ( หรือ เข้าใช้งานผ่าน Social Login )







เว็บไซต์ของเราให้บริการเนื้อหาบทความสำหรับนักพัฒนา โดยพึ่งพารายได้เล็กน้อยจากการแสดงโฆษณา โปรดสนับสนุนเว็บไซต์ของเราด้วยการปิดการใช้งานตัวปิดกั้นโฆษณา (Disable Ads Blocker) ขอบคุณครับ