https://github.com/mesak/laravel-api-response
build a Laravel api response package
https://github.com/mesak/laravel-api-response
api api-response json json-response laravel laravel-package laravel-response php rest-api
Last synced: 12 months ago
JSON representation
build a Laravel api response package
- Host: GitHub
- URL: https://github.com/mesak/laravel-api-response
- Owner: mesak
- License: mit
- Created: 2022-12-31T09:09:48.000Z (about 3 years ago)
- Default Branch: main
- Last Pushed: 2023-09-15T13:22:20.000Z (over 2 years ago)
- Last Synced: 2025-01-31T19:37:03.227Z (about 1 year ago)
- Topics: api, api-response, json, json-response, laravel, laravel-package, laravel-response, php, rest-api
- Language: PHP
- Homepage:
- Size: 36.1 KB
- Stars: 2
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE.md
Awesome Lists containing this project
README
# Laravel Api Response
Laravel Api Response
Control the api format with a unified callback method
# installation
```bash
composer require mesak/laravel-api-response
```
Or you could directly reference it into your `composer.json` file as a dependency
```json
{
"require": {
"mesak/laravel-api-response": "^1.0.0"
}
}
```
## Controller
change your api controller, to extend `Mesak\LaravelApiResponse\Http\Controllers\Controller`
```php
namespace App\Http\Controllers;
use Mesak\LaravelApiResponse\Http\Controllers\ApiController as BaseController;
class MainController extends BaseController
{
}
```
then you can return your all response
# Example
## Use Pagination
```php
class MainController extends BaseController
{
function index(Request $request)
{
return \App\Models\User::paginate(15);
}
}
```
## Use Resources
```php
class MainController extends BaseController
{
function index(Request $request)
{
$users = \App\Models\User::paginate(15);
return \App\Http\Resources\User::collection($users);
}
}
```
## Use Exception
```php
class MainController extends BaseController
{
function index(Request $request)
{
$users = \App\Models\User::paginate(15);
if( $users->isEmpty() )
{
throw new \Exception('No users found');
}
return \App\Http\Resources\User::collection($users);
}
}
```
## Use Extends Exception
```php
class MainController extends BaseController
{
function index(Request $request)
{
$users = \App\Models\User::paginate(15);
if( $users->isEmpty() )
{
throw new \Mesak\LaravelApiResponse\Exceptions\BaseException('No users found' ); //statusCode 500
}
return \App\Http\Resources\User::collection($users);
}
}
```
## Use Custom Exception
create your custom exception class `app/Exceptions/BadRequestException.php`
```php
namespace App\Exceptions;
class BadRequestException extends \Mesak\LaravelApiResponse\Exceptions\BaseException
{
protected $errorCode = 400;
protected $statusCode = 400;
public function __construct($message = 'Bad Request')
{
parent::__construct($message);
}
}
```
then you can use it in your controller
```php
use App\Exceptions\BadRequestException;
class MainController extends BaseController
{
function index(Request $request)
{
$users = \App\Models\User::paginate(15);
if( $users->isEmpty() )
{
throw new BadRequestException(); //statusCode 400
}
return \App\Http\Resources\User::collection($users);
}
}
```
## without ApiController
if you don't want to extend `Mesak\LaravelApiResponse\Http\Controllers\ApiController` you can use
`response()->success($data,$statusCode);`
`response()->error($data,$statusCode);`
```php
class MainController extends \App\Http\Controllers\Controller
{
function index(Request $request)
{
$users = \App\Models\User::paginate(15);
if( $users->isEmpty() )
{
return response()->error('no data',400);
}
$result = \App\Http\Resources\User::collection($users);
return response()->success($result);
}
}
```
## custom config
You can customise your api schema content with a custom config.php.
```bash
php artisan vendor:publish --tag=api-response --force
```