Lumen สร้าง REST API Thai Crane Company

หลังจากที่ติดตั้ง lumen ไปแล้ว ต่อไปเราก็จะสร้าง REST API ใครยังไม่ติดตั้ง ไปทางนี้เลยครับ ติดตั้ง Lumen สำหรับสร้าง REST API

ส่วนใครพร้อมแล้วมาเริ่มเลยครับ

1.ออกแบบ REST API

REST API ที่จะทำสำหรับ  Thai Crane Company แอพรวมข้อมูลบริษัทเครนในประเทศไทย  มี prototype ตามนี้ครับ

thai crane company prototype
Thai Crane Prototype

 

จาก prototype ออกแบบ api ก็จะได้ ดังนี้ครับ

GET     /v1/company                       ดึงข้อมูลบริษัทเครนทั้งหมด แสดงผลในหน้าแรก

GET     /v1/company/{id}              ดึงข้อมูลบริษัทเครนตามที่เลือก กดปุ่ม detail

GET     /v1/company/geo/{id}      ดึงข้อมูลบริษัทเครนตามภาค กดเลือก เมนูที่ side menu

 

2.สร้าง CompanyController

ต่อไปก็สร้าง Controller เอาไว้ใช้งานตาม api ที่ออกแบบไว้   ไปยัง lumen project  แล้วสั่ง

        php artisan make:controller  CompanyController

ปรากฏว่า error ครับ เพราะ lumen ไม่มีคำสั่ง make:controller ให้ใช้งาน

 

เมื่อใช้ไม่ได้ เราก็ต้องหาผู้ช่วยครับ  ติดตั้ง lumen-generators เข้าไปเพิ่มใน project ครับ

       composer require wn/lumen-generators

ลงทะเบียน Service Provider ในไฟล์   bootstrap/app.php

         $app->register(‘Wn\Generators\CommandsServiceProvider’);

เอา comment หน้า code  $app->withEloquent(); ออก เป็นการใช้งาน Eloquent ORM

 $app->withEloquent();

 

สั่ง   php artisan list  จะเห็นรายการเพิ่มขึ้นมาดังนี้

 

สร้าง  Company Controller

      php artisan wn:controller Company

จะได้ไฟล์  CompaniesController.php  เพิ่มเข้ามา และเพิ่มข้อมูล route ในไฟล์  routes/web.php

 

สังเกตว่า ใน CompaniesController มีการเรียกใช้งาน  RESTActions  เราสามารถเรียกใช้ RESTActions ใน Controller ตัวอื่นๆ ได้

เพิ่ม RESTActions ดังนี้ครับ

php artisan wn:controller:rest-actions

RESTActions สร้างเป็น  trait ( เริ่มใช้ตั้งแต่ PHP 5.4.0 ทำให้ PHP สามารถ implements a method เพื่อ reuse code ได้ )

 

3.สร้าง Model Company

ก่อนสร้าง model ก็ต้องสร้าง database พร้อมกับนำข้อมูลให้เรียบร้อยครับ
ไฟล์ sql ครับ https://github.com/bchaichon/thai_crane_company/blob/master/db_crane.sql

(ตาราง migrations จะไม่มีใน sql นะครับ ถูกสร้างตอน run คำสั่ง migration ครับ )

ต่อไปก็กำหนดค่า config  ของ database โดยการ copy file .env.example  save as เป็น .env  แล้วแก้ไขข้อมูลตาม database ที่จะใช้งานครับ ของผมแก้ได้ดั้งนี้ อย่าลืมใส่ timezone เป็น Asia/Bangkok นะครับ

 

และแล้วก็ได้เวลา สร้าง Company model

php artisan wn:model Company

เสร็จแล้ว run server   php -S localhost:8000 -t public   เข้าเว็บไปที่ http://localhost:8000/company

จะพบว่า หาตาราง crane.companies ไม่เจอครับ เพราะมันไม่มีนั่นเอง

เพิ่มข้อมูลไปใน Model Company ดังนี้

 

เข้าใหม่ที่  http://localhost:8000/company  รอบนี้ก็จะได้ข้อมูล บ.เครน ออกมาครับ

จากข้อที่ 1 เราออกแบบ REST API ให้มีเลข version ด้วย /v1/company  ปรับไฟล์ routes/web.php โดยเพิ่ม group prefix เข้าไป แล้วย้าย route ที่เกี่ยวกับ company เข้าไปไว้ข้างใน ก็จะได้ไฟล์หน้าตาแบบนี้ครับ


ส่วน post  put  delete  ไม่ได้ใช้ ก็ comment ไว้ครับ เนื่องจากแอพ Thai Crane Company ดึงข้อมูลมาแสดงอ่านเดียว

เราก็จะสามารถเรียกใช้งานได้แล้วครับ

http://localhost:8000/v1/company            ดึงข้อมูลทั้งหมด
http://localhost:8000/v1/company/2        ดึงข้อมูล บ.เครน  id=2

 

เหลืออีก 1 ตัวครับ คือ แสดงข้อมูล บ.เครน ตามภาค  /v1/company/geo/{id}

เพิ่ม function geo เข้าไป CompaniesController

เพิ่ม  $app->get(‘company/geo/{id}’, ‘CompaniesController@geo’);  ลงไปในไฟล์ routes/web.php

เข้าเว็บเรียกใช้งานดูครับ  http://localhost:8000/v1/company/geo/2  ก็จะได้ข้อมูลของภาคกลางออกมา

จบแล้วครับ API พร้อมใช้งาน ต่อไปก็จะเป็นการทำแอพ android ครับ

หวังว่าจะมีประโยชน์นะครับ ^^

Ref Link.
https://github.com/webNeat/lumen-generators
https://laravel.com/docs/5.0/queries