This repository has been archived by the owner on May 25, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
11 changed files
with
350 additions
and
76 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,2 +1,3 @@ | ||
/vendor | ||
composer.lock | ||
.phpunit.result.cache |
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,19 +1,17 @@ | ||
<p align="center"> | ||
<img src="https://raw.githubusercontent.com/laravel/art/master/logo-lockup/5%20SVG/2%20CMYK/1%20Full%20Color/laravel-logolockup-cmyk-red.svg" width="400"> | ||
</p> | ||
<h1 align="center">Laravel API Response Builder</h1> | ||
<img src="https://raw.githubusercontent.com/laravel/art/master/logo-lockup/5%20SVG/2%20CMYK/1%20Full%20Color/laravel-logolockup-cmyk-red.svg" width="400" alt="Laravel"> | ||
<h1>Laravel API Response Builder</h1> | ||
|
||
|
||
<p align="center"> | ||
<a href="#"><img src="https://poser.pugx.org/laravel/framework/license.svg" alt="License"></a> | ||
</p> | ||
--- | ||
 | ||
[](https://github.com/pcsaini/laravel-api-response-builder/actions/workflows/phpunit.yml) | ||
 | ||
|
||
## Table of contents ## | ||
|
||
* [Introduction](#introduction) | ||
* [Installation & Configuration](#installation--configuration) | ||
* [Examples](#examples) | ||
* [License](#license) | ||
* [Introduction](#introduction) | ||
* [Installation & Configuration](#installation--configuration) | ||
* [Examples](#examples) | ||
* [License](#license) | ||
|
||
|
||
## Introduction ## | ||
|
@@ -23,12 +21,283 @@ REST API JSON responses. | |
|
||
|
||
## Installation & Configuration ## | ||
You can install this package via composer using: | ||
``` | ||
composer require pcsaini/laravel-api-response-builder | ||
``` | ||
|
||
Next run the command below to setup `api-response.config` file, you can set your configuration. | ||
``` | ||
php artisan vendor:publish --tag=response-builder | ||
``` | ||
|
||
|
||
## Examples ## | ||
|
||
### Example : Success | ||
``` | ||
use Pcsaini\ResponseBuilder\ResponseBuilder; | ||
public function index() { | ||
$users = User::query()->take(2)->get(); | ||
return ResponseBuilder::success($users); | ||
} | ||
// Output | ||
Status: 200 OK | ||
{ | ||
"status": true, | ||
"data": [ | ||
{ | ||
"id": 1, | ||
"name": "Prof. Bell Hayes", | ||
"email": "[email protected]", | ||
"email_verified_at": "2022-12-07T05:27:30.000000Z", | ||
"created_at": "2022-12-07T05:27:30.000000Z", | ||
"updated_at": "2022-12-07T05:27:30.000000Z" | ||
}, | ||
{ | ||
"id": 2, | ||
"name": "Ms. Tessie Streich III", | ||
"email": "[email protected]", | ||
"email_verified_at": "2022-12-07T05:27:30.000000Z", | ||
"created_at": "2022-12-07T05:27:30.000000Z", | ||
"updated_at": "2022-12-07T05:27:30.000000Z" | ||
} | ||
] | ||
} | ||
``` | ||
|
||
### Example : Custom Success | ||
``` | ||
use Pcsaini\ResponseBuilder\ResponseBuilder; | ||
public function login() { | ||
$user = User::query()->first(); | ||
$token = Uuid::uuid4(); | ||
return ResponseBuilder::asSuccess() | ||
->withMessage('Successfuly Login') | ||
->with('auth_token', $token) | ||
->withData([ | ||
'profile' => new UserResource($user) | ||
]) | ||
->build(); | ||
} | ||
// Output | ||
Status: 200 OK | ||
{ | ||
"status": true, | ||
"message": "Successfuly Login", | ||
"auth_token": "65050859-1a05-4fa8-827f-7023ff73d4a3", | ||
"data": { | ||
"profile": { | ||
"id": 1, | ||
"name": "Prof. Bell Hayes", | ||
"email": "[email protected]" | ||
} | ||
} | ||
} | ||
``` | ||
|
||
### Example : Error | ||
``` | ||
use Pcsaini\ResponseBuilder\ResponseBuilder; | ||
public function index() { | ||
return ResponseBuilder::error('Sorry We are not able to getting your details', Response::HTTP_INTERNAL_SERVER_ERROR); | ||
} | ||
// Output | ||
Status: 500 Internal Server Error | ||
{ | ||
"status": false, | ||
"message": "Sorry We are not able to getting your details" | ||
} | ||
``` | ||
|
||
### Example : Custom Error | ||
``` | ||
use Pcsaini\ResponseBuilder\ResponseBuilder; | ||
public function index() { | ||
return ResponseBuilder::asError(Response::HTTP_BAD_GATEWAY) | ||
->withMessage('Sorry We are not able to getting your details') | ||
->with('custom_key', 'value') | ||
->withData([ | ||
'bad_gateway_error' => 'We are not able to process your request' | ||
]) | ||
->build(); | ||
} | ||
// Output | ||
Status: 502 Bad Gateway | ||
{ | ||
"status": false, | ||
"message": "Sorry We are not able to getting your details", | ||
"code": 10001, | ||
"data": { | ||
"bad_gateway_error": "We are not able to process your request" | ||
} | ||
} | ||
``` | ||
|
||
|
||
### Example : Validation Error Message | ||
``` | ||
use Pcsaini\ResponseBuilder\Http\ValidationFailed; | ||
class UserRequest extends FormRequest | ||
{ | ||
use ValidationFailed; | ||
. | ||
. | ||
} | ||
// Output | ||
Status: 400 Bad Request | ||
{ | ||
"status": false, | ||
"errors": { | ||
"name": [ | ||
"The name field is required." | ||
], | ||
"email": [ | ||
"The email field is required." | ||
] | ||
} | ||
} | ||
``` | ||
|
||
* You can customize HttpStatus Code in `config/api-response.php` under the variable `validation_http_code`. | ||
* You can customize your error message `config/api-response.php` under the variable `show_validation_failed_message`, `all` for get all error messages and `first` for get the first message. | ||
|
||
Example: | ||
``` | ||
// config/api-response.php | ||
'show_validation_failed_message' => 'first', | ||
// Output | ||
Status: 400 Bad Request | ||
{ | ||
"status": false, | ||
"message": "The name field is required." | ||
} | ||
``` | ||
|
||
### Example : Custom Filed | ||
``` | ||
use Pcsaini\ResponseBuilder\ResponseBuilder; | ||
public function index() { | ||
$user = User::query()->first(); | ||
$token = Uuid::uuid4(); | ||
return ResponseBuilder::asSuccess()->with('auth_token', $token)->withData($user)->build(); | ||
} | ||
// Output: | ||
Status: 200 OK | ||
{ | ||
"status": true, | ||
"auth_token": "21d97007-e2b9-4ee1-86b1-3cfb96787436", | ||
"data": { | ||
"id": 1, | ||
"name": "Prof. Bell Hayes", | ||
"email": "[email protected]", | ||
"email_verified_at": "2022-12-07T05:27:30.000000Z", | ||
"created_at": "2022-12-07T05:27:30.000000Z", | ||
"updated_at": "2022-12-07T05:27:30.000000Z" | ||
} | ||
} | ||
``` | ||
|
||
### Example : Pagination | ||
``` | ||
use Pcsaini\ResponseBuilder\ResponseBuilder; | ||
public function index() { | ||
$user = User::query()->paginate(3); | ||
return ResponseBuilder::asSuccess()->withPagination($user)->build(); | ||
} | ||
// Output: | ||
Status: 200 OK | ||
{ | ||
"status": true, | ||
"data": [ | ||
{ | ||
"id": 1, | ||
"name": "Prof. Bell Hayes", | ||
"email": "[email protected]", | ||
"email_verified_at": "2022-12-07T05:27:30.000000Z", | ||
"created_at": "2022-12-07T05:27:30.000000Z", | ||
"updated_at": "2022-12-07T05:27:30.000000Z" | ||
}, | ||
. | ||
. | ||
], | ||
"meta": { | ||
"total_page": 14, | ||
"current_page": 1, | ||
"total_item": 40, | ||
"per_page": 3 | ||
}, | ||
"link": { | ||
"next": true, | ||
"prev": false | ||
} | ||
} | ||
``` | ||
|
||
### Example : Pagination and you are using JsonResource | ||
``` | ||
use Pcsaini\ResponseBuilder\ResponseBuilder; | ||
public function index() { | ||
$user = User::query()->paginate(3); | ||
return ResponseBuilder::asSuccess()->withPagination($user, UserResource::class)->build(); | ||
} | ||
// Output: | ||
Status: 200 OK | ||
{ | ||
"status": true, | ||
"data": [ | ||
{ | ||
"id": 1, | ||
"name": "Prof. Bell Hayes", | ||
"email": "[email protected]" | ||
}, | ||
. | ||
. | ||
], | ||
"meta": { | ||
"total_page": 14, | ||
"current_page": 1, | ||
"total_item": 40, | ||
"per_page": 3 | ||
}, | ||
"link": { | ||
"next": true, | ||
"prev": false | ||
} | ||
} | ||
``` | ||
|
||
## License ## | ||
|
||
* Written and copyrighted ©2022 by Prem Chand Saini ([[email protected]](mailto:[email protected])) | ||
* ResponseBuilder is open-sourced software licensed under the [MIT license](http://opensource.org/licenses/MIT) | ||
* Written and copyrighted ©2022 by Prem Chand Saini ([[email protected]](mailto:[email protected])) | ||
* ResponseBuilder is open-sourced software licensed under the [MIT license](http://opensource.org/licenses/MIT) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.