目前我们正在执行以下操作:
使用类似以下的openapitools.json文件:
{
"$schema": "node_modules/@openapitools/openapi-generator-cli/config.schema.json",
"spaces": 2,
"generator-cli": {
"version": "5.1.1",
"generators": {
"node_v1.0": {
"generatorName": "nodejs-express-server",
"output": "#{cwd}/api/gen/v1.0/#{name}",
"glob": "openapi/*.yaml"
}
}
}
}
我们需要运行以下命令:
npx openapi-generator-cli generate
这将创建名为gen
的目录,其结构如下:
- api
- controllers
- services
- utils
目前,我们处理业务和数据库逻辑的解决方案是进入controllers/DefaultController.js
并更改Service的require链接以指向我们实际的src/business_logic/Service.js
代码。在我们的Service.js代码中,我们调用端点中的其他逻辑,例如:
static getMaterials() {
const payload = MaterialLogic.materialFetchAll();
const code = 200;
return { payload, code };
}
作为参考,生成的代码如下,但您可以看到没有逻辑:
/**
* Returns list of materials
*
* returns List
* */
const getMaterials = () => new Promise(
async (resolve, reject) => {
try {
resolve(Service.successResponse({
}));
} catch (e) {
reject(Service.rejectResponse(
e.message || 'Invalid input',
e.status || 405,
));
}
},
);
这个的OpenAPI规范看起来像:
/materials:
get:
operationId: getMaterials
description: Returns list of materials
responses:
200:
description: list of Materials
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Material'
401:
description: not authorized to use this endpoint
我们明显不能改变
gen
中的任何代码来使我们的应用程序按需覆盖和生成(这也是使用OpenAPI gen工具的全部意义),那正确的做法是什么呢?在我们的OpenAPI规范中,是否有一种指定要使用不同Service.js
的方法?或者,我们缺少某种依赖注入来将业务/数据库逻辑引入其中?希望我们的问题足够清晰明了。