Installation:
composer require citizen63000/easy-api-core
Publish the config file (if needed):
php artisan vendor:publish --provider="Citizen63000\EasyApiCore\EasyApiCoreServiceProvider" --tag="config"
First Use Case:
Define a basic API resource in app/Http/Resources/ExampleResource.php:
namespace App\Http\Resources;
use Citizen63000\EasyApiCore\Http\Resources\BaseResource;
class ExampleResource extends BaseResource
{
public function toArray($request)
{
return [
'id' => $this->id,
'name' => $this->name,
];
}
}
Register in routes/api.php:
use App\Http\Resources\ExampleResource;
use Citizen63000\EasyApiCore\Facades\EasyApi;
Route::get('/examples', function () {
return EasyApi::resource(ExampleResource::class, Example::all());
});
Resource Transformation:
Use BaseResource to standardize API responses with built-in methods like:
$this->withMeta(['count' => $this->count]);
$this->withLinks(['next' => url('/examples?page=2')]);
API Versioning:
Leverage the version() helper in routes:
Route::prefix('v1')->group(function () {
Route::get('/examples', function () {
return EasyApi::resource(ExampleResource::class, Example::all());
});
});
Request Validation:
Extend BaseRequest for consistent validation:
namespace App\Http\Requests;
use Citizen63000\EasyApiCore\Http\Requests\BaseRequest;
class StoreExampleRequest extends BaseRequest
{
public function rules()
{
return [
'name' => 'required|string|max:255',
];
}
}
Pagination:
Use EasyApi::paginate() for standardized pagination:
return EasyApi::paginate(ExampleResource::class, Example::paginate(10));
EasyApiCore\Middleware\ApiAuthenticate to API routes for unified auth handling.BaseExceptionHandler to customize API error responses.EasyApi::mockResource() for unit testing:
$mock = EasyApi::mockResource(ExampleResource::class, ['id' => 1, 'name' => 'Test']);
$response = $this->getJson('/examples/1')->assertOk();
Resource Caching:
BaseResource instances directly; use Laravel’s built-in caching or EasyApi::cacheResource() for granular control.Versioning Conflicts:
v1, v2) are consistent across all API endpoints to avoid versioning mismatches.EasyApi::setVersion('v1') in a middleware for dynamic versioning.Request Validation:
BaseRequest classes must extend Citizen63000\EasyApiCore\Http\Requests\BaseRequest to inherit core validation logic.Pagination Edge Cases:
EasyApi::paginate() assumes Eloquent paginators by default. For custom collections, pass ['paginator' => true]:
EasyApi::paginate(ExampleResource::class, $customCollection, ['paginator' => true]);
api.log_enabled = true in config/easy-api-core.php to log resource transformations and requests.EasyApi::dumpResource() in Tinker to inspect resource output:
php artisan tinker
>>> EasyApi::dumpResource(new ExampleResource(Example::first()));
Custom Directives:
Extend BaseResource to add reusable directives:
class ExampleResource extends BaseResource
{
public function toArray($request)
{
return $this->mergeWhen(
$this->whenLoaded('user'),
['user' => new UserResource($this->user)]
);
}
}
API Middleware:
Override EasyApiCore\Middleware\ApiTransformResponse to modify all API responses globally.
Dynamic Fields:
Use EasyApi::fields() to support dynamic field inclusion:
Route::get('/examples', function () {
return EasyApi::fields(ExampleResource::class, ['name', 'id'])
->resource(ExampleResource::class, Example::all());
});
How can I help you explore Laravel packages today?