Package Data | |
---|---|
Maintainer Username: | raphaisdev |
Maintainer Contact: | raphaisdev@gmail.com (Raphael) |
Package Create Date: | 2017-07-17 |
Package Last Update: | 2024-09-16 |
Language: | PHP |
License: | GNU General Public License v3.0 |
Last Refreshed: | 2025-02-06 03:03:36 |
Package Statistics | |
---|---|
Total Downloads: | 9 |
Monthly Downloads: | 0 |
Daily Downloads: | 0 |
Total Stars: | 2 |
Total Watchers: | 1 |
Total Forks: | 0 |
Total Open Issues: | 0 |
This package was created to extend the Laravel Framework response system, and elevate him to the standard described on the {json:api} website[^jsonapi].
The answers besides creating a more friendly and readable formatting also contemplate the control of the Headers according to the last code.
Use composer do install our package:
composer require ftd/default-api-response
And call the provider inside your Laravel /config/app.php file:
'providers' => [
...
/*
* FTD Default API Response
*/
FTD\DefaultAPIResponse\DefaultAPIResponseServiceProvider::class,
],
Now it's done and we're ready to go!
FTD API Response give us 5 new methods:
Every method has a particular way to use, but always easy.
This method will throw a header status code 200 and put your content inside a data wrapper:
Example:
public function index()
{
return response()->success(App\User::all());
}
Result:
{
"data": [
{
"id": 1,
"name": "Rodolfo",
"email": "rodolfo@ftdapi.com",
"created_at": null,
"updated_at": null
},
{
"id": 2,
"name": "Shirley",
"email": "shirlei@ftdapi.com",
"created_at": "2017-06-16 01:02:03",
"updated_at": null
}
]
}
Example:
public function show(User $user)
{
return response()->success($user);
}
Result:
{
"data": {
"id": 1,
"name": "Rodolfo",
"email": "rodolfo@ftdapi.com",
"created_at": null,
"updated_at": null
}
}
This method will throw a header status code 200 and put your content inside a data wrapper, and create another wrapper called meta, for the pagination properties:
Example:
public function index()
{
$users = App\User::paginate(2);
return response()->paginate($users);
}
Result:
{
"meta": {
"pagination": {
"current_page": 2,
"from": 3,
"last_page": 3,
"next_page_url": "http://ftdapi.com/api?page=3",
"path": "http://ftdapi.com/api",
"per_page": 2,
"prev_page_url": "http://ftdapi.com/api?page=1",
"to": 4,
"total": 6
}
},
"data": [
{
"id": 3,
"name": "Marley",
"email": "marley@ftdapi.com",
"created_at": "2017-06-15 00:00:01",
"updated_at": null
},
{
"id": 4,
"name": "Steve",
"email": "steve@ftdapi.com",
"created_at": "2017-06-16 01:02:03",
"updated_at": null
}
]
}
This method will throw a header status code 400 and put your content inside a errors wrapper:
Example:
//User Custom Request
public function rules()
{
return [
'name' => 'required|string|max:255',
'username' => 'required|unique:users|string|max:255',
'password' => 'required|string|max:255'
];
}
...
public function response(array $errors)
{
return response()->error($errors);
}
Result:
{
"errors": [
"Name must be provided.",
"Username must be provided.",
"Password must be provided."
]
}
If you need change the default status code of this methods, you can give a second parameter, like:
...
return response()->success($data, 201);
...
return response()->paginate($data, 206);
...
return response()->error($data, 401);
This method is used for who need more control of the entire response:
Example:
public function myCustomMethod()
{
return response()->custom(
$content = [
"Name" => "Rodolfo",
"Age"=>13
],
$status = 200,
$headers = ["X-USER-INFO" => TRUE],
$headerContentType = 'application/json'
);
}
Result: In your header you will see the:
"X-USER-INFO" : true
or
"X-USER-INFO" : 1
Depends on which browser you are using.
And, finally, the response body will receive the contents, but without the default data wrapper:
{
"Name": "Rodolfo",
"Age": 13
}
If you need to force download of a PDF file, for example, this method is the right way to do it.
This method will throw a header status code and depends on which code, put default message content inside a data or errors wrapper:
Example:
public function store()
{
return response()->defaultStatusCode(400);
}
Result:
{
"errors": [
"Bad Request"
]
}
|Code | Reference | |-----|-------------------------------------| | 102 | 'Processing', | | 200 | 'OK', | | 201 | 'Created', | | 202 | 'Accepted', | | 203 | 'Non-authoritative Information', | | 204 | '',//No Content | | 206 | 'Partial Content', | | 207 | 'Multi-Status', | | 302 | 'Found', | | 304 | 'Not Modified', | | 400 | 'Bad Request', | | 401 | 'Unauthorized', | | 402 | 'Payment Required', | | 403 | 'Forbidden', | | 404 | 'Not Found', | | 405 | 'Method Not Allowed', | | 406 | 'Not Acceptable', | | 409 | 'Conflict', | | 413 | 'Payload Too Large', | | 415 | 'Unsupported Media Type', | | 416 | 'Requested Range Not Satisfiable', | | 422 | 'Unprocessable Entity', | | 423 | 'Locked', | | 424 | 'Failed Dependency', | | 500 | 'Internal Server Error', | | 501 | 'Not Implemented', | | 503 | 'Service Unavailable' |
If you need more information about status code, the HTTP Status Codes website[^statuscodes] may help you.
[^jsonapi]: {json:api} A specification for building apis in json.
[^statuscodes]: httpstatuses.com is an easy to reference database of HTTP Status Codes with their definitions and helpful code references all in one place.