iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 18
2

Day18 laravel 設計自己的api

之前我介紹過什麼是api,這次我要介紹如何建立自己的api。這意味著前後端的完全分離,你將不在碰任何有關畫面的東西。

之前我使用PHP原生語法寫題目時,可能會使用PHP語法,導向某個頁面之類的寫法。在之前的範例中,也有使用controller時會return一個view之類的,這些作法都參與了前端的頁面轉換。

現在我們的目的是開出api給前端串接,我們不需要干涉前端,只要return前端要的資料即可。

response json

通常api設計在給前端資料時會使用json格式
controller範例:

public function index()
    {
        $tasks = Task::all();
        return response()->json(['status' => true, 'user_data' => $tasks], 200);
    }

你可以使用response()->json的型式,return一個json的型式。

  • json()
    第一個參數填入一個array,使用key,value的型式,填入前端要的格式就行了。
    第二個參數填入status code

status code

status code是後端給前端的訊息,發送request後,前端通常看後端給的status code就知道,成功還是失敗,而要是失敗的話是哪種類型的失敗。

通常有幾個status code是通用的,有些後端可能會有自己的status code,那些暫且不論,一開始我們得先知道常用的有哪些。

status code通常分為這幾類:

  1. 1xx訊息
  2. 2xx成功
  3. 3xx重新導向
  4. 4xx客戶端錯誤
  5. 5xx伺服器錯誤

我自己比較常用的大概就2xx和4xx類,例如成功就回覆200,若是request資料有輸入錯誤,就回覆400(Bad Request)。我就先舉例常用的

  1. 200 OK
  2. 201 Created
  3. 400 Bad Request
  4. 401 Unauthorized
  5. 403 Forbidden
  6. 404 Not Found
  7. 500 Internal Server Error

有status code就方便前端判斷是那邊出問題了,像500就是server端的問題,4xx系列就是前端的問題。

詳細的status code可以參考:
https://developer.mozilla.org/zh-TW/docs/Web/HTTP/Status

送出error response

假設request發送和我的api設計不符,可以用if else判斷,給出response
例如:

    public function show($id)
    {
        $task = Task::find($id);
        if (!$task) {
            return response()->json(['status' => false, 'error' => 'task search not found'], 400);
        }
        return response()->json(['status' => true, 'task_data' => $task], 200);
    }

假設這是找某個task的api,我需要前端給我task的id,好讓我去資料庫找給他,可是若前端給的$id是錯的,db中找不到,就可以回個400給前端,順便給個詳細的錯誤訊息。

還有,這些json內容格式需要找前端討論喔,儘量統一格式,方便前端做串接。將api開出來後,其實還要寫出api文件才算結束,之後會發一篇講如何寫api文件的文章,敬請期待。


上一篇
Day17 介紹request發送工具 Postman
下一篇
Day19 撰寫api文件
系列文
後端新手 使用laravel 從零開始 到開出api30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言