OAuth2 認證機制 Token 原理

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

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

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

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

閱讀更多

加入會員認證、註冊帳號

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

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

php artisan make:auth

執行後會產生這些變更

閱讀更多

整理資料表(一) 什麼是關聯式資料表?

關聯式資料庫的概念,是由多個互相有關係的資料表儲存資料並建立關聯。每個資料表是一個實體物件資料,像是我們的animals 資料表,裡面每一筆資料都是物件資料,內容包含動物的所有特性。

我們來整理一下前幾天匯入的另外一張資料表 adoption_gov_animals。如果沒匯入請到前天的文章執行一下SQL

拆分種類資料

adoption_gov_animals 中有一個欄位資料是紀錄動物種,可以用下方SQL執行看看,公開資料有多少種類。

SELECT DISTINCT kind FROM adoption_gov_animals;

顯示結果是有三種,我們把它拆出來到另外一張資料表。先建立一張資料表 types 裡面包含主鍵 id ,以及 name 欄位。其他欄位是紀錄新建以及更新時間。

CREATE TABLE types (
  id bigserial PRIMARY KEY,
  name varchar(20),
  created_at timestamp,
  updated_at timestamp
);

建立完成資料表以後,我們把資料寫入 types 資料表

INSERT INTO types(name,updated_at,created_at)
SELECT DISTINCT kind, now(), now() FROM adoption_gov_animals;

成功!我們有一張 分類資料表了!來記錄每一種分類,例如:貓|狗|鳥…

我們建立一個新的欄位在 adoption_gov_animals 欄位名稱為 types_id 來紀錄兩個的關係,欄位類型要跟 types 資料表的 id 一樣(bigint)

閱讀更多

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');
閱讀更多

PostgreSQL COPY 匯入資料

今天來嘗試匯入資料的功能,這個超級方便,先想辦法下載資料吧!

打算用 行政院農業委員會資料公開平台下載動物認養資料(.csv)測試 https://data.coa.gov.tw/Query/AdvSearch.aspx?id=QcbUEzN6E6DL

如果用 INSERT 插入資料的陳述句,要寫上百條,上千條資料,苦惱、麻煩、不想做,還好有一個方便的功能 COPY 陳述句,這是 PostgreSQL專有的功能,可以匯入有分隔符號,一行一筆資料的檔案。

  1. 準備好原始要匯入的檔案 今天以 .csv 當範例
  2. 建立好資料表(因為PostgreSQL 只會全部讀入,所以欄位資料一定要夠,並且依照原始檔csv內容去新建)
  3. 利用 COPY 程式碼匯入資料
閱讀更多

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

新增(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

閱讀更多