The ApiResponseTrait
in the LaraUtilX
package provides a robust and standardized way to send JSON responses for API endpoints, including support for meta information, debug data, exception handling, and pagination.
successResponse(mixed $data = null, string $message = 'Request successful.', int $statusCode = 200, array $meta = []): \Illuminate\Http\JsonResponse
errorResponse(string $message = 'Something went wrong.', int $statusCode = 500, array $errors = [], mixed $debug = null): \Illuminate\Http\JsonResponse
app.debug
is true).exceptionResponse(\Throwable $e, int $statusCode = 500): \Illuminate\Http\JsonResponse
paginatedResponse($paginator, string $message = 'Data fetched successfully.'): \Illuminate\Http\JsonResponse
use LaraUtilX\Traits\ApiResponseTrait;
class MyController extends Controller
{
use ApiResponseTrait;
public function someAction()
{
$data = [...]; // Your data
$meta = ['custom' => 'value'];
return $this->successResponse($data, 'Fetched successfully.', 200, $meta);
}
}
use LaraUtilX\Traits\ApiResponseTrait;
class MyController extends Controller
{
use ApiResponseTrait;
public function someAction()
{
$errors = ['field' => 'Invalid value'];
$debug = ['trace' => '...'];
return $this->errorResponse('Validation failed.', 422, $errors, $debug);
}
}
use LaraUtilX\Traits\ApiResponseTrait;
class MyController extends Controller
{
use ApiResponseTrait;
public function someAction()
{
try {
// ...
} catch (\Throwable $e) {
return $this->exceptionResponse($e);
}
}
}
use LaraUtilX\Traits\ApiResponseTrait;
use Illuminate\Pagination\LengthAwarePaginator;
class MyController extends Controller
{
use ApiResponseTrait;
public function list()
{
$paginator = User::paginate(10);
return $this->paginatedResponse($paginator);
}
}
Success Response:
{
"success": true,
"message": "Request successful.",
"data": { /* your data */ },
"meta": { /* optional meta */ }
}
Error Response:
{
"success": false,
"message": "Something went wrong.",
"errors": [ /* error details */ ],
"debug": { /* debug info, only in debug mode */ }
}
Exception Response:
{
"success": false,
"message": "Internal server error.",
"errors": [],
"debug": {
"exception": "ExceptionClassName",
"message": "Exception message.",
"trace": [ /* stack trace */ ]
}
}
Paginated Response:
{
"success": true,
"message": "Data fetched successfully.",
"data": [ /* items */ ],
"meta": {
"pagination": {
"total": 100,
"count": 10,
"per_page": 10,
"current_page": 1,
"total_pages": 10
}
}
}
You can publish this trait through the below command:
php artisan vendor:publish --tag=lara-util-x-api-response-trait
This enhanced trait simplifies the process of sending API responses, ensuring a consistent, extensible, and debuggable format across your Laravel endpoints.