iT邦幫忙

第 11 屆 iT 邦幫忙鐵人賽

DAY 11
1

在完成 Model 與 Migration 的設置後,我們將會定義 API routes,在講到 api routes 之前,先來介紹一下 Laravel 基本的 route 概念。

Routing

最基本的 Router 結構為以下格式:

image alt

  • HTTP method or others

    HTTP method 常見的有 get、post、put/patch、delete、......等 ( 也可以用 any 直接指定全部 ),除此之外還可以放其他的值,不過此時 Router 的結構可能會有變形,例子如下:

    • match( 指向複數個 HTTP method ):
    Route::match(['get', 'post'],'/', function(){
        //    
    });
    
    • view ( 僅僅需要回傳 view ),第3個參數為 optional
    Route::view('/welcome', 'viewName', ['name' => 'Ken']);
    
    • redirect ( from here to there ),第3個參數為 optional ( 若沒加的話,預設值為 302 )
    Route::redirect('/here', '/there', 301);
    
  • URI

    除了上圖中最簡單的 URI 之外,也可能涵蓋一些變數,而這些變數定義的來源為 Callback function 的參數,如下例:

    • 典型變數來自 Callback function 的參數
        Route::get('user/{userId}/product/{productId}', function($userId, $productId){
            //
        })
    
    • 變數也可以是 optional,在 Callback function 中的參數則必須有預設值:
        Route::get('user/{name?}', function($name = null){
            //
        })
    
    • 甚至為了嚴格檢查那些變數,也可以用正規表達式 ( Regular Expression ):
    Route::get('user/{id}/{name}', function ($id, $name) {
        //
    })->where(['id' => '[0-9]+', 'name' => '[a-z]+']);
    
  • Callback

    Callback function 決定這個 Route 要做的事情,除了上述一種典型的 Callback function 之外,還可以有其他型式。

    • Callback 為 view 的情形:
    Route::get('/form', function(){
        return view('product.form');
    });
    
    • Callback 為 Controller 以及其 action:
    Route::get('products', 'ProductsController@index');
    

web.php & api.php

定義 routes 的檔案位置在 routes 資料夾,而其中檔案有兩種,第1種是一般針對網頁開發中最常用的 web.php,其中 middleware ( 之後會提 ) 即是針對瀏覽器端會遇到的問題 (如:session、CSRF 等 )。第2種則是針對開發 API 專用的 api.php,可以因應多種平台 ( 如:瀏覽器、iOS、Android 等),因為部份平台 ( 如:手機 ) 並沒有支援 session 等功能,因此後端必須要開 API 讓多個前端平台串接,而 api.php 的 middleware 也是針對 API 開發的情形。

本例:

由於這次我們是開發純後端 API 的狀況,因此定義 routes 的地點會在 api.php,必須注意 URI 的部分,api.php 都會是以 api/ 作為開頭。

在此專案的 user API routes 如下 :

*routes/api.php

Route::post('register', 'UsersController@register');
Route::post('login', 'UsersController@login');
Route::get('users', 'UsersController@index');
Route::get('users/{id}', 'UsersController@show');
Route::put('users/{id}', 'UsersController@update');
Route::delete('users/{id}', 'UsersController@destroy');

在有些狀況下,為了保有部份的彈性以及直覺度,有些 API 不一定會滿足 RESTful 的風格,上述針對會員功能 ( register、login ) 的 routes 就是典型的例子。

下一篇來介紹 Controller,敬請等候。

參考資料:

  1. Routing : https://laravel.com/docs/6.x/routing#redirect-routes

上一篇
Day 10 : user ( Model )
下一篇
Day 12: user ( Controller -- register )
系列文
從零開始的Laravel RESTful api30

尚未有邦友留言

立即登入留言