有些時候 call api 的 response 存在著固定格式,例如 status code: 200 (XX成功) , 400 (XX失敗) 或者 response 帶資料
{
"timestamp": "2021-05-07 17:05:57",
"status": 200,
"message": "XX成功"
}
{
"timestamp": "2021-05-07 17:05:57",
"status": 200,
"message": "XX成功",
"data": {
"XXX": "XXooXX#",
},
}
Laravel 內建立 helper function 沒什麼指令,也就是說 php artisan make ...
裡面不存在 php artisan make:helper
,因此,這邊得自己在 /app
底下自建資料夾 /Helpers
和 SystemResponse.php
php artisan make -h
依照 Laravel 會自動將 陣列 轉換為 JSON Response,這邊就不在使用 json()
,我在 Laravel 陣列 轉換為 JSON Response,真的嗎? 一文中驗證不加 json()
會如何。
<?php
namespace App\Helpers;
class SystemResponse
{
// Basic Response
// 預設 $status = 200,若為 $status = 400 ,使用 basicResponse() 自行帶入
public static function basicResponse($message, $status = 200)
{
return response([
'timestamp' => now()->format('Y'),
'status' => $status,
'message' => $message,
], $status);
}
// Data Response
public static function dataResponse($data, $message = '查詢成功', $status = 200)
{
return response([
'timestamp' => now()->format('Y'),
'status' => $status,
'message' => $message,
'data' => $data,
], $status);
}
}
我特意將 method 寫作 static function,使用 static function 不需要實體化,直接 SystemResponse::basicResponse('hello word!');
,便可以使用該方法 產生 response,例如:
<?php
use Illuminate\Support\Facades\Route;
use App\Helpers\SystemResponse;
Route::get('basic', function(){
return SystemResponse::basicResponse('hello word!');
});
<?php
Route::get('data', function(){
$data = [
'gender' => 'female',
'height' => '168 cm',
'weight' => '43 kg',
];
return SystemResponse::dataResponse($data);
});
當 Response 存在著固定格式輸出時,透過自制的 SystemResponse function,減少撰寫重複程式碼,讓程式碼具有可讀性,接下來我將簡介 Laravel format response 的方法 Resource.
Laravel 陣列 轉換為 JSON Response,真的嗎?