omalizadeh / laravel-api-response
Basic and standard api response format for laravel using json resources
v1.2.0
2025-02-24 11:29 UTC
Requires
- php: ^8.1
- ext-json: *
- laravel/framework: ^8.67 || ^9.52 || ^10.17 || ^11.0
Requires (Dev)
- orchestra/testbench: ^6.24 || ^7.0 || ^8.5 || ^9.0
README
Basic and standard api response format for laravel using json resources.
Installation
composer require omalizadeh/laravel-api-response
Output Format
Resources:
{ "data": { "id": 1, "email": "test@test.com" }, "message": "message", "errors": { "password": [ "wrong password." ] } }
ResourceCollection:
{ "data": { "items": [], "count": 0, "sum": null }, "message": null, "errors": null }
On validation error for requests (with 422 status code):
{ "data": null, "message": "first error message in message bag", "error": { "password": [ "password field is required." ] } }
Usage
Create resources and requests with artisan commands and pass data, message or count to resources like following examples:
public function index(EmailFilter $filters) { $emailsFilterResult = Email::filter($filters); return EmailResource::collection([ 'data' => $emailsFilterResult->data(), 'count' => $emailsFilterResult->count(), ]); }
public function show(Email $email) { return new EmailResource(['data' => $email, 'message'=> 'email info.']); }
You can specify output fields from transformDataItem() method of resource classes.
<?php namespace App\Http\Resources; use Omalizadeh\ApiResponse\Resources\BaseApiResource; class EmailResource extends BasicResource { protected function transformDataItem($item) { return [ 'id' => $item->id, 'email' => $item->email, 'status' => $item->status ]; } }
Also, you can use apiResponse() helper function to directly send response
class PhoneController { public function show(Phone $phone) { return apiResponse()->data($phone)->message('phone info.')->status(200)->get(); } public function index() { $phones = Phone::all(); return apiResponse()->collection($phones, $phones->count())->message('phone info.')->status(200)->get(); } public function update(Request $request, Phone $phone) { $isUpdated = $phone->update($request->all()); if (!$isUpdated) { return apiResponse()->errorMessage('phone is not updated'); } return apiResponse()->data($phone)->message('phone is updated')->get(); } }
In above example message and status are optional, and their default value respectively are null
and 200
.
Resource
php artisan make:api-resource ResourceClassName
Request
php artisan make:api-request RequestClassName