在 LoopBack 4 中创建没有模型的 API 端点可以通过以下步骤实现,核心思路是绕过模型直接使用控制器(Controller)和依赖注入来实现自定义逻辑。以下是完整方案:
LoopBack 4 的 API 端点通常与模型(Model)绑定,但通过自定义控制器和路由,可以完全脱离模型限制。关键组件:
使用 lb4 controller
命令生成空控制器(不绑定模型):
lb4 controller noModel --type empty
生成的文件位于 src/controllers/no-model.controller.ts
。
示例:创建一个返回静态数据的 GET 端点:
import {get, param, Response, RestBindings} from '@loopback/rest';
import {inject} from '@loopback/core';
export class NoModelController {
constructor() {}
@get('/no-model/{name}')
greet(
@param.path.string('name') name: string,
@inject(RestBindings.Http.RESPONSE) res: Response,
) {
return {message: `Hello, ${name}! This API has no model.`};
}
}
若需调用外部服务(如数据库、第三方 API),可通过依赖注入:
import {service} from '@loopback/core';
import {ExternalService} from '../services';
export class NoModelController {
constructor(
@service(ExternalService)
private externalService: ExternalService,
) {}
@get('/no-model/data')
async fetchData() {
const data = await this.externalService.getData();
return {data};
}
}
src/application.ts
中的路由顺序,或使用唯一路径前缀。src/services
中定义,并在 application.ts
中绑定:src/services
中定义,并在 application.ts
中绑定:@param
装饰器或自定义拦截器:@param
装饰器或自定义拦截器:// src/controllers/no-model.controller.ts
import {get, post, param, requestBody} from '@loopback/rest';
import {service} from '@loopback/core';
import {ExternalService} from '../services';
export class NoModelController {
constructor(
@service(ExternalService)
private externalService: ExternalService,
) {}
@get('/no-model/hello')
hello() {
return {message: 'This is a model-free API!'};
}
@post('/no-model/process')
async processData(
@requestBody({
content: {
'application/json': {
schema: {
type: 'object',
properties: {input: {type: 'string'}},
},
},
},
})
body: {input: string},
) {
const result = await this.externalService.transform(body.input);
return {result};
}
}
通过上述方法,可完全脱离模型创建灵活、高效的 API 端点,适用于各种定制化需求。
没有搜到相关的文章