Not ready for production Currently support AdonisJs v4+MongoDB only. Also check REST-ADMIN - An awesome admin dashboard based on vue 2 and bootstrap v4
also you can use
npm
by ommit--yarn
-
Install required packages
adonis install @adonisjs/validator --yarn adonis install @adonisjs/antl --yarn adonis install @adonisjs/drive --yarn adonis install lucid-mongo --yarn # install adonis-rest adonis install adonis-rest --yarn
-
Edit
/start/app.js
const providers = [ '@adonisjs/validator/providers/ValidatorProvider', '@adonisjs/antl/providers/AntlProvider', '@adonisjs/drive/providers/DriveProvider', 'lucid-mongo/providers/LucidMongoProvider', 'adonis-rest/providers/RestProvider', ]
-
Edit
/start/routes.js
`Route.rest('/rest/api', 'api')`
-
Open
http://localhost:3333/rest/api/users
(or another port) should return paginated user list.
The config file of adonis-rest
is /config/rest.js
,you can define any number of modules of adonis-rest routes. e.g. For frontend api and backend api, we call them api
and admin
module.exports = {
//route module name
api: {
//authenticator name
auth: 'jwt',
// which means there are only `index` and `show` routes
isAdmin: false,
//all of your resources config
resources: {
// for `/products`
products: {
// must access with a valid token
auth: true,
// all of your default query config for `/products`
query: {
// when list all products
index: {
// fetch appends, please refer to **Appends**
append: ['is_buy'],
// fetch related data
with: ['categories'],
// also you can define default sorting
sort: { _id: -1 },
},
// when show a product
show: {
append: ['is_buy'],
}
}
},
}
},
admin: {
//maybe `adminJwt`
auth: 'jwt',
//allow C(create)/U(update)D/(delete) routes
isAdmin: true,
//allow destroy all routes
allowDestroyAll: true,
resources: {
// ...
}
}
}
And then, you can add routes easily:
/start/routes.js
/**
* @param String base url
* @param string key of route module in `/config/rest.js`
**/
Route.rest('/rest/api', 'api')
Route.rest('/rest/admin', 'admin')
Now, You can check the followed links: (if your port of server is 3333
)
There is a more powerful base model Rest/Models/Model
You can define a Product
model like this:
const Model = use('Rest/Models/Model')
module.exports = class Product extends Model {
}