61 lines
1.7 KiB
Markdown
61 lines
1.7 KiB
Markdown
# Laravel API skeleton
|
|
|
|
This is a feature-based API application skeleton.
|
|
|
|
## Requirements
|
|
|
|
* PHP 8.2+
|
|
|
|
## About
|
|
|
|
### Packages
|
|
|
|
The skeleton contains the following packages:
|
|
|
|
* `diffhead/php-dto` - DTO implementation
|
|
* `laravel/framework` - Laravel version 12
|
|
* `laravel/tinker` - Application interpreter
|
|
* `laravel/sanctum` - Authentication library
|
|
* `spatie/laravel-permission` - Authorization features
|
|
|
|
It also includes packages for application testing. See `composer.json` for details.
|
|
|
|
### Architecture
|
|
|
|
This is a feature-based skeleton. Every feature has a
|
|
service provider which should be included by adding it to
|
|
`bootstrap/providers.php`.
|
|
|
|
The skeleton has the `App\Kernel` namespace which contains
|
|
some basic utilities, enums, middlewares and other
|
|
fundamental components.
|
|
|
|
Also this application has the `App\Shared` namespace for
|
|
services, events, or other things that will be shared
|
|
between features and components.
|
|
|
|
`App\Models` namespace should contain global app models
|
|
which represent database structures.
|
|
|
|
#### Feature
|
|
|
|
A feature can contain route definitions, event listeners,
|
|
commands, services, and other required components needed to
|
|
implement a specific functionality.
|
|
|
|
I strongly recommend keeping each feature isolated from the
|
|
others. A good sign of proper isolation is that the application
|
|
continues to work stably even when a feature is disabled.
|
|
|
|
### Infrastructure
|
|
|
|
The skeleton contains a Jenkinsfile in the root of the project as
|
|
an example of how to build and deploy the application. It also
|
|
contains Docker files inside the `deploy` directory.
|
|
|
|
### Usage
|
|
|
|
The skeleton includes an `app\Feature\Example` feature as an example of how to
|
|
define features, some shared services and events, and base
|
|
migrations with the user model.
|