ตัวอย่างการสร้างและเรียกใช้ API ด้วยคชสาร ตอนที่ 1

API เป็นจุดเด่นอย่างหนึ่งของคชสาร เนื่องจากคชสารเป็นเฟรมเวอร์คที่มีประสิทธิภาพสูงทำให้การสร้าง API ด้วยคชสารจะได้ประสิทธิภาพที่ดีกว่า สามารถรองรับจำนวนรีเควสพร้อมๆกันได้มากกว่าเฟรมเวอร์คอื่นๆ

ในตัวอย่างนี้ผมจะนำเสนอการสร้าง API อย่างง่ายๆ รวมถึงการใช้ประโยชน์จาก API แบบง่ายๆด้วย

ก่อนอื่นเรามาสร้าง API กันก่อน
1. ไฟล์ api.php เป็นไฟล์หลักสำหรับเรียก API ซึ่งก็จะมีโค้ดคล้ายๆกับไฟล์ index.php ที่เป็นไฟล์หน้าเว็บของคชสารทั่วๆไป สิ่งที่แตกต่างไปจากปกติคือ เราจะมีการกำหนด defaultController เป็น Index\Api\Controller แทน เนื่องจาก defaultController หลักเราจะใช้ในการเรียกตัวอย่างตามปกติ
<?php
/**
 * @filesource projects/api/api.php.
 *
 * @author Goragod Wiriya <admin@goragod.com>
 * @link http://www.kotchasan.com/
 * @copyright 2016 Goragod.com
 * @license http://www.kotchasan.com/license/
 */

/**
 * 0 (default )บันทึกข้อผิดพลาดร้ายแรงลง error_log .php
 * 1 บันทึกข้อผิดพลาดและคำเตือนลง error_log .php
 * 2 แสดงผลข้อผิดพลาดและคำเตือนออกทางหน้าจอ (ใช้เฉพาะตอนออกแบบเท่านั้น)
 */

//define('DEBUG', 0);

/**
 * false (default)
 * true บันทึกการ query ฐานข้อมูลลง log (ใช้เฉพาะตอนออกแบบเท่านั้น)
 */

//define('DB_LOG', false);
// load Kotchasan
include '../../Kotchasan/load.php';
// Initial Kotchasan Framework
$req = Kotchasan::createWebApplication();
$req->defaultController = 'Index\Api\Controller';
$req->run();

2. ที่ Index\Api\Controller จะทำหน้าที่ในการรับค่าพารามิเตอร์ที่ส่งมาจาก URL แบบ GET แล้วส่งไปประมวลผลที่ Model ตามเมธอดที่เลือก เสร็จแล้วส่งค่ากลับเป็น JSON เป็นผลลัพท์ของ API
<?php
/**
 * @filesource index/controllers/api.php
 * @link http://www.kotchasan.com/
 * @copyright 2016 Goragod.com
 * @license http://www.kotchasan.com/license/
 */


namespace Index\Api;

use \Kotchasan\Http\Request;
use \Kotchasan\Http\Response;

/**
 * API Controller
 *
 * @author Goragod Wiriya <admin@goragod.com>
 *
 * @since 1.0
 */

class Controller extends \Kotchasan\Controller
{

  /**
   * method สำหรับตรวจสอบและประมวลผล API
   *
   * @param Request $request
   */

  public function index(Request $request)
  {
    // method ที่ต้องการ
    $method = $request->get('method')->toString();
    // ตัวแปรสำหรับส่งค่ากลับ
    $ret = array();
    // ประมวลผล method ที่ต้องการ
    if (method_exists('Index\Api\Model', $method)) {
      $ret['result'] = call_user_func(array('Index\Api\Model', $method), $request);
    } else {
      // ข้อผิดดพลาด ไม่พบ method
      $ret['error'] = 'Method not found';
    }
    // create Response สำหรับส่งค่ากลับ
    $response = new Response;
    // กำหนด header เป็น JSON+UTF-8
    $response->withHeader('Content-Type', 'application/json; charset=utf-8')
      // ข้อมูลที่ส่งกลับ
      ->withContent(json_encode($ret))
      // ส่ง
      ->send();
  }
}

ในกรณีที่ไม่พบเมธอดที่ต้องการ จะคืนค่าข้อผิดพลาดเป็น JSON เช่นกัน

3. สุดท้ายคือ Model ที่ใช้ประมวลผลคำสั่งของ API ซึ่งตัวอย่างนี้จะมีเมธอด getTime ซึ่งเป็นเมธอดสำหรับแปลงค่า id ที่ส่งมาเป็นวันที่และเวลา
<?php
/**
 * @filesource index/models/api.php
 * @link http://www.kotchasan.com/
 * @copyright 2016 Goragod.com
 * @license http://www.kotchasan.com/license/
 */


namespace Index\Api;

use \Kotchasan\Http\Request;

/**
 * API Model
 *
 * @author Goragod Wiriya <admin@goragod.com>
 *
 * @since 1.0
 */

class Model
{

  /**
   * ฟังก์ชั่นแปลง id เป็นเวลา
   *
   * @param Request $request
   * @return string
   */

  public static function getTime(Request $request)
  {
    return \Kotchasan\Date::format($request->get('id')->toInt());
  }
}

คำอธิบายการทำงานแต่ละบรรทัดอยู่ในโค้ดนะครับ สังเกตุได้ตามนั้นเลย และเราสามารถทดสอบการใช้งาน API ได้ด้วยการเรียกผ่าน URL ธรรมดาไปยัง api.php ตัวอย่าง https://www.kotchasan.com/projects/api/api.php?method=getTime&id=0123456789

อ่านต่อ ตัวอย่างการสร้างและเรียกใช้ API ด้วยคชสาร ตอนที่ 2
0SHAREFacebookLINE it!