REST API controller implementing default CRUD semantics.
This module allows applications to quickly expose models via REST API without having to implement custom controller or repository classes.
npm install --save @loopback/rest-crud
@loopback/rest-crud
can be used along with the built-in ModelApiBooter
to
easily create a repository class and a controller class for your model. The
following use is a simple approach for this creation, however, you can look at
the "Advanced use" section instead for a more flexible approach.
For the examples in the following sections, we are assuming a model named
Product
and a datasource named db
have already been created.
In your src/application.ts
file:
// add the following import
import {CrudRestComponent} from '@loopback/rest-crud';
export class TryApplication extends BootMixin(
ServiceMixin(RepositoryMixin(RestApplication)),
) {
constructor(options: ApplicationConfig = {}) {
// other code
// add the following line
this.component(CrudRestComponent);
}
}
Create a new file for the configuration, e.g.
src/model-endpoints/product.rest-config.ts
that defines the model
,
pattern
, dataSource
, basePath
, and readonly
properties:
import {ModelCrudRestApiConfig} from '@loopback/rest-crud';
import {Product} from '../models';
module.exports = <ModelCrudRestApiConfig>{
model: Product,
pattern: 'CrudRest', // make sure to use this pattern
dataSource: 'db',
basePath: '/products',
readonly: false,
};
Now your Product
model will have a default repository and default controller
class defined without the need for a repository or controller class file.
If you would like more flexibility, e.g. if you would only like to define a
default CrudRest
controller or repository, you can use the two helper methods
(defineCrudRestController
from @loopback/rest-crud
and
defineCrudRepositoryClass
from @loopback/repository
). These functions will
help you create controllers and repositories using code.
For the examples in the following sections, we are also assuming a model named
Product
, and a datasource named db
have already been created.
Here is how you would use defineCrudRestController
for exposing the CRUD
endpoints of an existing model with a respository.
-
Create a REST CRUD controller class for your model.
const ProductController = defineCrudRestController< Product, typeof Product.prototype.id, 'id' >(Product, {basePath: '/products'});
-
Set up dependency injection for the
ProductController
.inject('repositories.ProductRepository')(ProductController, undefined, 0);
-
Register the controller with your application.
app.controller(ProductController);
Use the defineCrudRepositoryClass
method to create named repositories (based
on the Model) for your app.
Usage example:
import {defineCrudRepositoryClass} from '@loopback/repository';
const ProductRepository = defineCrudRepositoryClass(Product);
this.repository(ProductRepository);
inject('datasources.db')(ProductRepository, undefined, 0);
Here is an example of an app which uses defineCrudRepositoryClass
and
defineCrudRestController
to fulfill its repository and controller
requirements.
import {defineCrudRepositoryClass} from '@loopback/repository';
export class TryApplication extends BootMixin(
ServiceMixin(RepositoryMixin(RestApplication)),
) {
constructor(options: ApplicationConfig = {}) {
// ...
}
async boot(): Promise<void> {
await super.boot();
const ProductRepository = defineCrudRepositoryClass(Product);
const repoBinding = this.repository(ProductRepository);
inject('datasources.db')(ProductRepository, undefined, 0);
const ProductController = defineCrudRestController<
Product,
typeof Product.prototype.id,
'id'
>(Product, {basePath: '/products'});
inject(repoBinding.key)(ProductController, undefined, 0);
this.controller(ProductController);
}
}
Run npm test
from the root folder.
See all contributors.
MIT