前言
個人認為 RESTful API的response除了json之外,也應讓人快速理解request後發生什麼事。因此本篇會從「格式」與「HTTP狀態碼」分別討論。
個人習慣不管請求成功或失敗,都會提供固定格式的json給前端。
例如
//成功案例
return response()->json(['success' => true, 'message' => "add success", 'data' => $dataResult], 200);
//失敗案例
return response()->json(['success' => false, 'message' => $messageError, 'data' => null], 400);
而非
//成功案例
return response()->json($dataResult), 200);
//失敗案例
return response()->json($messageError), 200);
固定回傳格式,對於強型別語言的編譯比較不會出錯。
未固定格式時,雖然可透過http status code判斷成功或失敗,但解析json又得多花一段心力或通靈,來預防未知的錯誤。
怎麼回傳格式,其實只要團隊討論好就行,google 「API response format 」可以發現有許多範例。若團隊無人有特殊要求,建議後端工程師可以先提出固定回傳格式的成功與失敗案例供團隊使用。例如這種寫法也是蠻好理解的:
//response of successful request:
{
"status": "success",
"data": {
/* Application-specific data would go here. */
},
"message": null /* Or optional success message */
}
//response of failed request:
{
"status": "error",
"data": null, /* or optional error payload */
"message": "Error xyz has occurred"
}
Laravel 的 Response Objects除了可自訂header之外,http status code也是可以自行設定的。
http status code,又稱HTTP狀態碼,使用3位數字來表示 web server在超文本傳輸協定的回應狀態,在RFC的分類下,主要有以下幾種 :
個人常用的狀態碼如下
參考資料
https://noob.tw/restful-api/
https://zh.wikipedia.org/wiki/%E5%BC%B7%E5%BC%B1%E5%9E%8B%E5%88%A5
https://stackoverflow.com/questions/12806386/is-there-any-standard-for-json-api-response-format
https://docs.microsoft.com/zh-tw/azure/architecture/best-practices/api-design
https://tw.ews.mall.yahooapis.com/handbook_v3/webservice_guide/format/
https://learnku.com/docs/laravel/7.x/responses/7463
https://zh.wikipedia.org/wiki/HTTP%E7%8A%B6%E6%80%81%E7%A0%81
https://developer.mozilla.org/zh-TW/docs/Web/HTTP/Status