@loopback/docs
Version:
Documentation for LoopBack 4
116 lines (79 loc) • 2.81 kB
Markdown
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.
```sh
npm install --save @loopback/rest-crud
```
`@loopback/rest-crud` exposes two helper methods (`defineCrudRestController` and
`defineCrudRepositoryClass`) for creating controllers and respositories using
code.
For the examples in the following sections, we are assuming a model named
`Product`, and a datasource named `db` have already been created.
### Creating a CRUD Controller
Here is how you would use `defineCrudRestController` for exposing the CRUD
endpoints of an existing model with a respository.
1. Create a REST CRUD controller class for your model.
```ts
const ProductController = defineCrudRestController<
Product,
typeof Product.prototype.id,
'id'
>(Product, {basePath: '/products'});
```
2. Set up dependency injection for the ProductController.
```ts
inject('repositories.ProductRepository')(ProductController, undefined, 0);
```
3. Register the controller with your application.
```ts
app.controller(ProductController);
```
Use the `defineCrudRepositoryClass` method to create named repositories (based
on the Model) for your app.
Usage example:
```ts
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.
```ts
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);
}
}
```
- [Guidelines](https://github.com/strongloop/loopback-next/blob/master/docs/CONTRIBUTING.md)
- [Join the team](https://github.com/strongloop/loopback-next/issues/110)
Run `npm test` from the root folder.
See
[](https://github.com/strongloop/loopback-next/graphs/contributors).
MIT