การพัฒาน web application ข้อที่ควรคำนึงถึงคือเรื่อง url (endpoints) ต่าง ๆ ภายใน application ของเรา อาจจะเป็น url แบบเดียวกันได้เพียงแต่กำหนด http method ไม่เหมือนกัน เช่น
- [GET] /api/v1/user สร้างเพื่อ provide data ให้กับ client
- [POST] /api/v1/user สร้างเพื่อกำหนดไว้สำหรับ create data ใหม่
จุดสั่งเกตุที่เห็นได้ชัดคือ ความเหมือนกันของ url แต่ต่างกันในเรื่อง method เท่านั้น ทางฝั่ง application เราเอง (กำหนด route) จะ mapping route ให้ตรงกับการ request เรียกเข้ามา request เรียกมาแบบ [GET] ก็จะเข้าไปทำงานในส่วนของ GET method , เรียกมาแบบ [POST] จะเข้าไปทำงานในส่งของ POST method เรื่องเหล่านี้ต้องมาทำความเข้าใจกัน บทความนี้จะมาอธิบาย
การกำหนด Methods มีกี่แบบ Laravel จะต้องเขียนอย่างไร
- GET
- มีการเก็บ cached การ request ได้
- ไม่ควรอย่างยิ่งสำหรับการส่ง sensitive data มากับ url
- มีข้อจำกัดเรื่องความยาวของ url + parameters
- ใช้สำหรับขอข้อมูลเท่านั้น ไม่เหมาะกับการแก้ไขข้อมูล
- POST
- ไม่ถูกเก็บ cached เอาไว้ (request body) จะไม่ถูกเก็บไว้
- ไม่อยู่ในประวัติของ browser
- request body สามารถกำหนดได้ยาว ขนาดใหญ่
- PUT
- เป็นลักษณะการสร้าง (created) หรือ อัพเดท (update) ข้อมูลฝั่ง serve
- HEAD
- คล้ายกันกับ GET แต่ไม่มีการคืนค่ากลับ
- DELETE
- การลบข้อมูลที่เป็น unique โดยส่วนใหญ่จะเป็น uuid หรือ id ที่ระบุเป็นเฉพาะเจาะจง
- PATCH
- เพื่อปรับเปลี่ยนบางอย่างของข้อมูลฝั่ง server
- OPTIONS
- เพื่ออธิบายการทำงานของ data ฝั่ง server
Laravel มีการกำหนด http methods Laravel Routing จะถูกสร้างไว้ที่ไฟล์ /routes/web.php และ /routes/api.php
[GET] สำหรับ inline function Route::get('foo', function () { return 'Hello World'; }); [GET] สำหรับ use controller route อื่น ๆ Route::get('/user', 'UserController@index'); [*] ลักษณะการกำหนด methods อื่น ๆ ทำตาามนี้ Route::get($uri, $callback); Route::post($uri, $callback); Route::put($uri, $callback); Route::patch($uri, $callback); Route::delete($uri, $callback); Route::options($uri, $callback);
การกำหนด parameters ให้ทำ route ในรูปแบบต่าง ๆ
[required] การกำหนด parameters บังคับ ในรูแบบ required parameters จะกำหนดภายใต้ {} Route::get('user/{id}', function ($id) { return 'User '.$id; }); Route::get('posts/{post}/comments/{comment}', function ($postId, $commentId) { // }); [non required] กำหนด parameters แบบไม่บังคับให้ส่งเข้ามา Route::get('user/{name?}', function ($name = null) { return $name; }); Route::get('user/{name?}', function ($name = 'John') { return $name; }); [regular] กำหนด parameter ด้วย rules ตาม pattern ด้วย regular expression Route::get('user/{name}', function ($name) { // })->where('name', '[A-Za-z]+'); Route::get('user/{id}', function ($id) { // })->where('id', '[0-9]+'); Route::get('user/{id}/{name}', function ($id, $name) { // })->where(['id' => '[0-9]+', 'name' => '[a-z]+']);
ศึกษาเพิ่มเติมเรื่อง Routes การทำ Routes Grouping จากลิ้งนี้ Laravel Routes
การรับค่าจาก HttpRequest ในรูปแบบต่าง ๆ
การที่จะได้มาของ parameters data ที่ได้จากการ request client นั้นมีได้หลายรูปแบบ ตามตัวอย่าง
การเข้าถึงค่าของ url information ที่ถูก request เข้ามา
[url path] $uri = $request->path(); // Without Query String... $url = $request->url(); // With Query String... $url = $request->fullUrl();
การรับค่า (request body data) จาก HttpRequest (Payload Request Body)
[all] จะได้ค่าเป็น object ของ request data
$input = $request->all();
[name] การเข้าถึง value ด้วยการกำหนดจาก name ของ parameter
$name = $request->input('name');
[empty then value] กำหนดค่า default หากไม่พบค่าจาก parameters นั้น ๆ
$name = $request->input('name', 'Sally');
[json array] การเข้าถึง request ที่เป็นลักาณะ raw json array ก็ทำได้
$name = $request->input('products.0.name');
$names = $request->input('products.*.name');
การรับค่า (request body data) จาก HttpRequest (Query Parameters)
[?name=hello] การเข้าถึง queryString จาก parameters $name = $request->query('name'); [empty then value] $name = $request->query('name', 'Helen');
ตรวจสอบค่าจาก parameters ด้วย name
[checking] ตรวจสอบ parameter ชื่อ name หากมีจะเข้าเงื่อนไขการทำงาน
if ($request->has('name')) {
//
}
if ($request->has(['name', 'email'])) {
//
}
if ($request->hasAny(['name', 'email'])) {
//
}
[not empty] ตรวจสอบค่า parameter ต้องไม่เป็นค่าว่าง จะใช้ function filled ตรวจสอบ
if ($request->filled('name')) {
//
}
รูปแบบการใช้งาน Routes และ HttpRequest ใน Laravel มีเนื้อหาเพิ่มเติมอีกมากมาย สามารถศึกษาเพิ่มเติมได้ที่ Laravel Route ,Laravel Request
ขอบคุณที่ติดตามบทความครับ