前幾篇文章都在講述『怎麼從程式內部 Call API』等文章,這篇文章開始敘述 Call API 得到的 response 如何 format?
再將 response format 之前, Laravel 提供一基礎的 response 方式, Laravel 文件 - HTTP Responses 中提到 Laravel 可以將 Route 或 Controller 的 return value 為 string 時 自動轉換為 Http Response; 文件也提到,Laravel 會自動將 陣列 轉換為 JSON Response.
顯然,Laravel 也知道提供 基礎的 response 是不夠使用的,因此,Laravel 提供 Response Objects,可以經由 class Response 不同的 method, 轉換為不同的 response type,以 return string value 加上 json()
為例,將 HTTP Response 設定其 Header 的 Content-Type 為 JSON 的 JSON Response:
<?php
Route::get('/hi', function(){
// 將 HTTP Response 轉為 content-type: application/json
return(response()->json("hello word")->get("Content-Type"));
// Content-Type: "application/json"
});
由上例 call api 的 uri /hi
,始終都會得到 status code: 200 OK,若這時要把 default status code 改為 404 且 Content-Type 要為 application/json ,將如何變更呢!
例子如下:
<?php
Route::get('/hi', function(){
// response 的 value: "hello word", status code: 200
return response()->json("hello word");
});
<?php
Route::get('/hi', function(){
// 設定 response 的 value: "error msg", status: 404
// 將 Content-Type 設定為 application/json
return (response("error msg", 404)->header("Content-Type", "application/json"));
});
Laravel 提供的 class Response 和 helper function response()
幫助我們開發者,簡化程式碼和易閱讀 call api 的 response 以什麼 Content-Type 輸出,我下篇文章將介紹怎麼應用 response()
自制 Laravel helper response function 因應重複的 response.
1 Laravel 文件 - HTTP Responses
2 w3schools - Laravel Responses
3 Laravel attaching-headers-to-responses