cbxtechcorp / lumen-rest-api-template
Lumen Framework Rest API Boilerplate using JWT AUTH
Installs: 18
Dependents: 0
Suggesters: 0
Security: 0
Stars: 4
Watchers: 2
Forks: 0
Open Issues: 1
Type:project
Requires
- php: ^7.3|^8.0
- dingo/api: ^3.0
- illuminate/mail: ^8.80
- illuminate/redis: ^8.80
- laravel/lumen-framework: ^8.3.1
- laravel/tinker: ^2.7
- liyu/dingo-serializer-switch: ^0.3.2
- nesbot/carbon: ^2.55
- palanik/lumen-cors: dev-master
- spatie/laravel-permission: ^5.5
- tymon/jwt-auth: ~1.0.1
Requires (Dev)
- fakerphp/faker: ^1.9.1
- flipbox/lumen-generator: ^8.2
- mockery/mockery: ^1.3.1
- phpunit/phpunit: ^9.5.10
This package is auto-updated.
Last update: 2024-10-30 01:48:23 UTC
README
This is a boilerplate for lumen 8.x if you are using lumen to write REST api it will help you.
This project use:
Write some easy APIs.
Checkout my other repo that is focused on reply to this template but using graphql lumen-graphql-api-template
Feel free to make a pull request and make this repo better :D
TODO
- docker
- phpunit validation
Main Features
Document your API
apidoc -i App/Http/Controller/Api/v1 -o public/apidoc
Use Artisan Generators
By default lumen does't support the useful laravel/artisan generators and using this extension we can use this comands executing a "dev inclusive" composer install.
Test:
php artisan make:model MyModel
USEFUL LINKS
- dingo/api https://github.com/dingo/api
- json-web-token(jwt) https://github.com/tymondesigns/jwt-auth
- transformer fractal
- apidoc apidocjs
- Rest API guidance jsonapi.org
- Rest API Debug Insomnia
- A good article http://oomusou.io/laravel/laravel-architecture
Installation
1 Install the project
Using GIT
git clone https://github.com/marco-gallegos/lumen-rest-api-template.git new_api
cd new_api
composer install
cp .env.example .env
php artisan jwt:secret
Using Composer
composer create-project --stability dev cbxtechcorp/lumen-rest-api-template new_api
2 configre your project
Now give to your project access tou your database and create the users table whit a test user.
vim .env DB_* configure your database access APP_KEY key:generate is abandoned in lumen, so do it yourself md5(uniqid()),str_random(32) etc.,maybe use jwt:secret and copy it php artisan migrate --seed
Documentation
Serve Your API
php artisan serve
# or
php -S localhost:8000 -t public
Deploy
In a production server we can omit development packages autoload using this command
composer install --no-dev
Routes
We have some routes to start.
- api/v1/users
- api/v1/permission
FAQ
About JWT
There is no session and auth guard in lumen 5.2, so attention config/auth.php
. Also user model must implement Tymon\JWTAuth\Contracts\JWTSubject
How to use mail
- composer require
illuminate/mail
andguzzlehttp/guzzle
- register email service in
bootstrap/app.php
orsome provider
- add
mail.php
services.php
in config, just copy them from laravel - add
MAIL_DRIVER
in env
How to use transformer
transformer is a layer help you format you resource and their relationship.
maybe you can knowstand with this links:
- https://lumen-new.lyyw.info/api/posts
- https://lumen-new.lyyw.info/api/posts?include=user
- https://lumen-new.lyyw.info/api/posts?include=user,comments
- https://lumen-new.lyyw.info/api/posts?include=user,comments:limit(1)
- https://lumen-new.lyyw.info/api/posts?include=user,comments.user
- https://lumen-new.lyyw.info/api/posts?include=user,comments:limit(1),comments.user
transformer data serizlizer
dingo/api use Fractal to transformer resouses,fractal provider 3 serializer,Array,DataArray,JsonApi.more details at here http://fractal.thephpleague.com/serializers/。DataArray is default.You can set your own serizlizer like this:
see bootstrap/app.php $app['Dingo\Api\Transformer\Factory']->setAdapter(function ($app) { $fractal = new League\Fractal\Manager; // $serializer = new League\Fractal\Serializer\JsonApiSerializer(); $serializer = new League\Fractal\Serializer\ArraySerializer(); // $serializer = new App\Serializers\NoDataArraySerializer(); $fractal->setSerializer($serializer);, return new Dingo\Api\Transformer\Adapter\Fractal($fractal); });
I think default DataArray is good enough.