瀏覽分類:

使用 Laravel 打造 RESTful API

會員權限設計(管理員、一般會員)

昨天設定修改資料表以符合需求,接下來要設定權限部分,打算分兩種會員 管理員與一般會員。

權限說明
管理員可以做所有的新增刪除修改
一般會員可以新增動物而已,並且只能修改自己新增的動物。無法新增刪除修改分類

新建一個原則 policy

php artisan make:policy AnimalPolicy -m Animal
產生policy檔案
閱讀更多

修改資料表新建 migration

明天我們要來建立權限的部分,之前設定的是驗證使用者使用 token 身份,但一班的網站至少會有管理員或一般會員的區分,因此今天先來修改基本需要設定的東西。

變更資料表

資料表原本規劃時沒注意到的地方,或是規劃好的東西難免都會被要求修改需求,所以修改資料表也是一門學問,用 migration 檔案修改檔案可以方便整個團隊更新到最新的版本。

跟大家說一個經驗,如果目前的系統是在線上用運行中的,並且公司沒有 DBA 在負責管理資料庫的話,要變更資料庫欄位時一定要三思而後行。 至少要確認有沒有備份。

閱讀更多

OAuth2 認證機制 Token 原理

簡單說要做任何需要認證的請求時。例如(我「想」要新增動物)那麼就要先跟伺服器請求核發一組 Access Token(就是一段亂碼)。把這個 Token 附帶在請求中,就可以操作需要驗證的API (我要新增動物-附帶有效的Token)

Passport 是一個官方推薦的套件,可以輕鬆簡單的讓你完成一個完善的 OAuth2 認證機制!

(這裡指的是否登入的感覺,不是權限角色的分組)

順帶一提,Passport Laravel版本必須要大於 5.3 才能使用。

閱讀更多

加入會員認證、註冊帳號

現在的API所有人都可以去操作這些資源Animal、Type 我們要來製作必須驗證後才可以操作API。

Laravel 提供了一種快速的方法,可以使用一個簡單的命令來建置認證所需的所有路由和前端畫面(view),主要是介紹著一個功能,方便我們註冊User帳號。

php artisan make:auth

執行後會產生這些變更

閱讀更多

Resource 轉換格式

為什麼要有 轉換格式呢? 有時候可能資料表原本的欄位不想讓請求用戶可以直接看到,不想直接讀出整個資料表的所有欄位,有些沒必要提供的就可以趁這時候把他移除掉喔!

需求

前一天我們做了Model 關聯的設定,這樣就可以在查詢animal 同時關聯出分類,以及利用生日欄位計算年齡,符合常見需求,讓請求者可以直接讀取年齡數值不需要再轉換!

閱讀更多

分類CRUD、模型關聯

定義資源

類別 type,預計紀錄該系統的動物分類 (貓、狗、其他…)

定義這個資源物件的內容

定義一個資源需要有哪些詳細資料。

欄位名 說明 格式 備註
id 分類id int(10) unsigned
name 類別名稱 varchar(50)
sort 排序 int(10) 
created_at 新建時間 timestamp NULL
updated_at 更新時間 timestamp NULL

產生基本檔案

C:\project\animal\ > php artisan make:model Type -rmc

設定路由

來到 api.php 把路由指定到 TypeController

Route::apiResource('types', 'TypeController');
閱讀更多

驗證資料格式、設定系統語系

新增(C) 查詢(R) 修改(U) 刪除(D) 都完成了!

但應該會發現一件事情,再新增以及修改的形況下,會有一點錯誤!

可以先嘗試看看

POST /api/animal

Headers 一樣給 json 格式回傳,但Body 裡面不要給任何值!

應該會出現錯誤!表示後端程式想要嘗試寫入不符合規定的值到資料表中!

所以需要做後端的表單檢查,Laravel 有一套驗證系統,設定的規則可以看官網文件

AnimalController 中的 store 方法裡一開頭加入

public function store(Request $request)
{
    $this->validate($request, [
        'type_id' => 'required',
        'name' => 'required|max:255',
        'birthday' => 'required|date',
        'area' => 'required|max:255',
        'fix' => 'required|boolean',
        'description' => 'nullable',
        'personality' => 'nullable'
    ]);

    //其他原本的程式略過
}
規格變數 說明
required 必填欄位
nullable 非必填欄位
max:255 最大255值
date 檢查是否為日期格式,利用 PHP strtotime 函數檢查字段
boolean 只能輸入 true false 1 0 “1” “0”

其他請參考

https://laravel.com/docs/5.8/validation#available-validation-rules

閱讀更多

動物排序

昨天參考別人的網址是如何設計的 ,排序的方式參數都是使用 sort ,由於它們都有客製化的排序方式。比如說依照出版日期…

我一樣打算做自由度高一點,透過使用 sorts (就是要跟別人不一樣 哈哈哈xD) 參數來操作。此參數的值以逗號分隔的排序欄位,並且可以使用「:」分隔,將排序方向附加到每個排序欄位。

asc 表示升序或 desc 表示降序。

格式

大約類似像這樣!

/api/animal?sorts=name:asc,id:desc

name 欄位進行排序升序(小->大),再由id倒序(大->小)排列

閱讀更多

篩選動物

研究一下別人的網址

我查了三個賣書的平台,搜尋條件如下

參數
關鍵字 ux
分類 中文書
價格 20 ~ 500
排列順序 精準度
閱讀更多