Method | URI | Name | Action |
---|---|---|---|
POST | api/products/ | product.store | App\Http\Controllers\ProductController@store |
GET | api/products/ | product.index | App\Http\Controllers\ProductController@index |
GET | api/products/{product} | product.show | App\Http\Controllers\ProductController@show |
PATCH | api/products/{product} | product.update | App\Http\Controllers\ProductController@update |
DELETE | api/products/{product} | product.destroy | App\Http\Controllers\ProductController@destroy |
在 Controller & Route:來指派店長跟分配店員吧! 的文章有先做過「新增產品」的範例,今天來試試不同區域的工作流程範例。
有新增產品就有刪除產品。
[ DELETE ] api/products/{product} 對應到的是 ProductController 的 destory 方法
有找到資料,然後刪除成功,會回傳 Http 狀態碼:204 No Content
如果找不到資料即會回傳 Http 狀態碼:404 Not Found
/**
* Remove the specified resource from storage.
* 刪除指定 ID 的商品
* @param \App\Models\Product $product
* @return \Illuminate\Http\Response
*/
public function destroy(Product $product)
{
// 刪除商品
$product->delete();
// 如果成功刪除就回傳空白內容並給 204 狀態碼
return response(null, Response::HTTP_NO_CONTENT);
}
HTTP 狀態碼其實是網路上大家約定俗成的標準,好比說常見的 404 Not Found 就是告訴你「這個頁面找不到」,或是 500 Internal Server Error 表示「伺服器出錯了」。
這些狀態碼都是由 IETF(Internet Engineering Task Force)制定的標準,基本上每個網頁、每個伺服器都遵守這些規範。
菜雞仔如我,當初查詢資料第一次看到 HTTP 狀態碼 就在思考像: 204 No Content
跟 404 Not Found
這些所謂的 HTTP 狀態碼 是從哪裡定義的呢?
為什麼找不到資料就是 404?為什麼不是 444 呢?
當然在開發過程中,你也可以自定義為 444 Not Found
:找不到資料就死死死定了(誤)
技術上可以自定義,你可以在程式碼中自己回傳一個自定義的狀態碼,比如把 404 改成 444,但這樣做其實會有一些潛在問題:
HTTP 的狀態碼是全球通用的,大部分的瀏覽器或應用程式是根據既定的 HTTP 狀態碼來決定接下來的行動。
如果你回傳一個 444,瀏覽器會不知道這到底代表什麼意思,可能會出現奇怪的行為,甚至無法正確處理這個錯誤。
你自己創造一個狀態碼的話,對其他人來說就會很難理解,在除錯上就會比較困難。
例如:一個開發者看到 444 可能會想:「這是什麼?是錯誤嗎?還是其他問題?」
如果大家都用標準的 404、500 這些狀態碼,就能馬上知道發生了什麼事,但如果用自定義的狀態碼,別人可能要花更多時間來理解問題。
在 Laravel 中,這些常數被定義在 Illuminate\Http\Response
類中,以下整理 GPT 提供的資料:
Illuminate\Http\Response
類中部分常數的定義:
namespace Illuminate\Http;
class Response extends \Symfony\Component\HttpFoundation\Response
{
const HTTP_CONTINUE = 100;
const HTTP_SWITCHING_PROTOCOLS = 101;
const HTTP_PROCESSING = 102; // RFC2518
const HTTP_OK = 200;
const HTTP_CREATED = 201;
const HTTP_ACCEPTED = 202;
const HTTP_NON_AUTHORITATIVE_INFORMATION = 203;
const HTTP_NO_CONTENT = 204;
const HTTP_RESET_CONTENT = 205;
const HTTP_PARTIAL_CONTENT = 206;
const HTTP_MULTI_STATUS = 207; // RFC4918
const HTTP_ALREADY_REPORTED = 208; // RFC5842
const HTTP_IM_USED = 226; // RFC3229
// 其他狀態碼...
}
以下是一些常見的 HTTP 狀態碼及其在 Laravel 中的常數名稱:
Response::HTTP_OK
Response::HTTP_CREATED
Response::HTTP_BAD_REQUEST
Response::HTTP_UNAUTHORIZED
Response::HTTP_FORBIDDEN
Response::HTTP_NOT_FOUND
Response::HTTP_INTERNAL_SERVER_ERROR
這些常數基於 HTTP 規範(如 RFC 7231、RFC 2518 等)創造的,每個常數對應於一個標準的 HTTP 狀態碼。這樣做的好處包括:
可以參考: Laravel 官方文件
這篇文章也可以搭配著看: 基本的 HTTP status code,像是 200、301、400、404、500