3分鐘短文:有面子!Laravel教你簡單寫出專業的RestfulAPI

ragus發表於2020-10-01

引言

在我們連線了資料庫,並且使用遷移功能建立了資料庫表結構,

使用Seeder為資料庫初步填充了一些偽資料。有了這些準備工作,我們可以考慮做一個資源介面功能,

對外提供資料支援了。

圖片

程式碼時間

有沒有感覺自己設計的API介面和資料跟別的大廠提供的文件資料結構不太一樣,

看上去不是那麼專業,或者說不是那麼標準?我們和大廠還差幾個年級?

laravel提供了簡單的標準方式,可以讓我們遵循最佳實踐寫出專業的url。

比如對於資源,使用restful風格宣告一下的url路由地址:

img

第一列是http請求方法,第二列是laravel內宣告的路由規則,第三列是對應的控制器方法。上面的資源列表,涵蓋了增刪改查的所有動作,可以說很全面了。

如何快捷地生成上述控制器方法呢?使用laravel腳手架指令,在命令列執行:

php artisan make:controller EventsController --resource

我們使用 –resource 選項,會在目標控制器內生成上述的所有方法。

生成的檔案位於 app/Http/Controllers/EventsController.php 內,初始化的內容如下:

img

這些方法真的是開箱即用啊。

那麼,我們還要手動一條一條地宣告上面的那些路由條目嗎?那真是噩夢啊。還好,laravel幫我們做好了,只用Route類的 resource 方法註冊資源就可以了:

Route::resource('events', 'EventsController');

使用資源路由方法,只用指定路由名稱,和對應的控制器方法,就可以不用繁瑣地寫那些路由,和控制器方法了。

為方便展示,我們把資料渲染到檢視檔案,首先建立 resources/views/events/index.blade.php 檢視檔案,使用預設的佈局檔案,填充以下程式碼:

@extends('layouts.app')
@section('content')
    <h1>Events</h1>
@endsection

開啟 app/Http/Controllers/EventsController 檔案並修改 index 方法:

public function index()
{
    return view('events.index');
}

大家看到了,上述方法內是沒有資料庫資料互動的,我們下面引入模型,並渲染到檢視內。在控制器頂部新增如下引用:

use App\Event;

index方法內填充以下程式碼:

$events = Event::all();
return view('events.index')->with('events', $events);

有了以上的資料,在檢視內簡單地遍歷輸出內容,修改檢視檔案如下:

<h1>Events</h1>
<ul>
    @forelse ($events as $event)
        <li>{{ $event->name }}</li>
    @empty
        <li>No events found!</li>
    @endforelse
</ul>

模板檔案內@forelse 方法會判斷是否 $events 變數至少有一個元素可供遍歷,如果沒有就輸出 @empty區塊的內容。在瀏覽器內訪問路由地址,輸出內容大致如下圖。因為使用的Faker填充的偽資料,所以看上去是這樣的:

img

如果資料量太大,這一頁估計要載入很久,列表很長。所以需要分頁了。加入分頁功能,使用的SQL語句大概是這樣的:

select id, name from events order by id asc limit 10 offset 0;
select id, name from events order by id asc limit 10 offset 10;

控制器內使用分頁功能,簡單對模型呼叫paginate方法即可:

$events = Events::paginate(10);

每頁設定為10條。我們在檢視內,要有一個前一頁,後一頁,以及頁碼的導航條,也不用我們手動寫了。laravel竟然繼承到了paginate方法所返回的 Illuminate\Pagination\LengthAwarePaginator 類內,只用在檢視內新增這樣一行就夠了:

{!! $events->links() !!}

生成的導航條如下:

img

寫在最後

本文簡明扼要地介紹了laravel資料庫填充所使用的方法,我們可以手動填充,

也可以使用第三方庫填充偽資料,效率明顯提升很多。也只要準備好了資料,

才能談得上業務邏輯和介面對接。這些資料也是應用程式的基礎,所以很重要。

本文是對上一章所述laravel資料庫遷移功能的補充。資料庫遷移是一個比較大的動作,

特別是已經上線生產的應用資料庫,如果非到更新遷移的地步不可,需要預期做好演練,

以應對可能的突發事故。

Happy coding :-)

我是@程式設計師小助手,專注程式設計知識,圈子動態的IT領域原創作者

本作品採用《CC 協議》,轉載必須註明作者和本文連結
write-less-do-more-make-you-out-of-door

相關文章