A super simple package allowing for consistent API responses throughout your Laravel application
f9webltd/laravel-api-response-helpers is a Laravel package for a super simple package allowing for consistent api responses throughout your laravel application .
It currently has 647 GitHub stars and 445.580 downloads on Packagist (latest version 4.0.0).
Install it with composer require f9webltd/laravel-api-response-helpers.
Discover more Laravel packages by f9webltd
or browse all Laravel packages to compare alternatives.
Last updated

A simple package allowing for consistent API responses throughout your Laravel application. Originally created to solve issues having with a large legacy project, see the package motivation section.
^8.2^12.0 or ^13.0The package supports actively supported Laravel releases as per the official Laravel Support Policy.
Legacy versions of this package support older PHP / Laravel version, see the legacy section.
composer require f9webltd/laravel-api-response-helpers
Simply reference the required trait within your controller:
<?php
namespace App\Http\Api\Controllers;
use F9Web\ApiResponseHelpers;
use Illuminate\Http\JsonResponse;
class OrdersController
{
use ApiResponseHelpers;
public function index(): JsonResponse
{
return $this->respondWithSuccess();
}
}
Optionally, the trait can be imported within a base controller.
respondNotFound(string|Exception $message, ?string $key = 'error')Returns a 404 HTTP status code, an exception object can optionally be passed.
respondWithSuccess(array|Arrayable|JsonSerializable|null $contents = null)Returns a 200 HTTP status code, optionally $contents to return as json can be passed. By default returns ['success' => true].
respondOk(string $message)Returns a 200 HTTP status code
respondUnAuthenticated(?string $message = null, ?string $key = 'error')Returns a 401 HTTP status code
respondForbidden(?string $message = null, ?string $key = 'error')Returns a 403 HTTP status code
respondError(?string $message = null, ?string $key = 'error')Returns a 400 HTTP status code
respondCreated(array|Arrayable|JsonSerializable|null $data = null)Returns a 201 HTTP status code, with response optional data
respondNoContent()Returns a 204 HTTP status code, with an empty response body (RFC 9110)
public function respondAccepted(array|Arrayable|JsonSerializable|null $data = null)Returns a 202 HTTP status code, with response optional data
public function respondConflict(?string $message = null, ?string $key = 'error')Returns a 409 HTTP status code, with response optional message. If the message is omitted a default is sent
public function respondTooManyRequests(?string $message = null, ?string $key = 'error')Returns a 429 HTTP status code, with response optional message. If the message is omitted a default is sent
setDefaultSuccessResponse(?array $content = null): selfOptionally, replace the default ['success' => true] response returned by respondWithSuccess with $content. This method can be called from the constructor (to change default for all calls), a base API controller or place when required.
setDefaultSuccessResponse is a fluent method returning $this allows for chained methods calls:
$users = collect([10, 20, 30, 40]);
return $this->setDefaultSuccessResponse([])->respondWithSuccess($users);
Or
public function __construct()
{
$this->setDefaultSuccessResponse([]);
}
...
$users = collect([10, 20, 30, 40]);
return $this->respondWithSuccess($users);
In addition to a plain PHP array, the following data types can be passed to relevant methods:
Illuminate\Contracts\Support\Arrayable contractJsonSerializable contractThis allows a variety of object types to be passed and converted automatically.
Below are a few common object types that can be passed.
Illuminate\Support\Collection$users = collect([10, 20, 30, 40]);
return $this->respondWithSuccess($users);
Illuminate\Database\Eloquent\Collection$invoices = Invoice::pending()->get();
return $this->respondWithSuccess($invoices);
Illuminate\Http\Resources\Json\JsonResourceThis package is intended to be used alongside Laravel's API resources and in no way replaces them.
$resource = PostResource::make($post);
return $this->respondCreated($resource);
For PHP ^8.2 with Laravel ^11.0 support, use package version ^3.1.
For PHP ^8.0 with Laravel ^8.0, ^9.0 and ^10.0 support use package version ^2.1.1.
For PHP ^7.4 and Laravel ^6.0 / ^7.0 support, use package version ^1.5.
Ensure consistent JSON API responses throughout an application. The motivation was primarily based on a very old inherited Laravel project. The project contained a plethora of methods/structures used to return an error:
response()->json(['error' => $error], 400)response()->json(['data' => ['error' => $error], 400)response()->json(['message' => $error], Response::HTTP_BAD_REQUEST)response()->json([$error], 400)I wanted to add a simple trait that kept this consistent, in this case:
$this->respondError('Ouch')
Please see UPGRADING for details.
Any ideas are welcome. Feel free to submit any issues or pull requests.
composer test
If you discover any security related issues, please email [email protected] instead of using the issue tracker.
The MIT License (MIT). Please see License File for more information.