دریافت یک API Response با چارچوب و قاعده مشخص می تواند برای تیم فرانت اند مفید باشد.
پکیج Apiful می تواند راه گریزی برای پیاده سازی API Response های شخصی سازی شده باشد.
برای شروع کار اول پکیج را نصب کنید:
composer require prodemmi/laravel-apiful
برای ارسال پاسخ، متود های متفاوتی وجود دارند که به شرح زیر است:
public function index(Request $request)
{
// Or
return apiful()->success();
// With message and data
return apiful($data)->withMessage("This is message")->success();
// Or
return apiful()->withData($data)->withMessage("This is message")->success();
}
پاسخ:
{
"status": "success",
"status_code": 200,
"message": "This is message",
"data": [...],
"meta": []
}
public function index(Request $request)
{
try {
return apiful()->success();
}catch (\Exception $e){
return apiful()->exception($e);
// Or
return apiful($e);
}
}
پاسخ:
{
"status": "error",
"status_code": 500,
"meta": [],
"message": "This is exception message",
"errors": {
"trace": [... ],
"file": "ApiController.php",
"line": 21
}
}
با تغییر فایل کانفیگ apiful.php می توان ارسال Trace و File و Line را غیر فعال کرد:
'errors' => [
'trace' => false,
'file' => false,
'line' => false
]
دیگر متود های ارسال ارور:
apiful()->badRequest();
apiful()->unauthorized();
apiful()->forbidden();
apiful()->internal();
apiful()->notAcceptable();
با استفاده از دکوریتور ها میتوانید این کار را انجام دهید ابتدا یک دکوریتور بسازید:
php artisan make:decorator UserDecorator
فایل دکوریتور در مسیر app/Http/Decorators/UserDecorator
را باز کنید و داخل متود toArray مدل Response که میخواهید را بنویسید:
<?php
namespace App\Http\Decorators;
use Prodemmi\Apiful\ApifulDecorator;
class َUserDecorator implements ApifulDecorator
{
public function toArray(array $response) : array
{
return [
'success' => true,
'message' => data_get($response, 'message', ''),
'users' => data_get($response, 'data', [])
];
}
}
بعد از آن باید دکوریتور خود را به فایل کانفیگ اضافه کنید:
'decorators' => [
...
'users' => \Prodemmi\Apiful\Decorators\UserDecorator::class // New decoration
]
حالا از دکوریتور در هر کجا می توانید استفاده کنید:
return apiful()->withDecorator('users')->withData($users);
// Or
return apiful()->withDecorator(UserDecorator::class)->withData($users);
برای دیدن اطلاعات بیشتر به صفحه اصلی پکیج بروید.