【发布时间】:2016-06-01 09:07:16
【问题描述】:
是否有任何方法可以为 WebApi 方法自动生成 OpenAPI/Swagger 元数据,甚至可以生成客户端打字稿模型?
我发现 Swashbuckle 和 Swagger to JS & Typescript Codegen 很好,但我想知道是否还有其他库。
如果你能给出每种方法的优缺点,那就完美了。
【问题讨论】:
标签: .net asp.net-web-api typescript swagger
是否有任何方法可以为 WebApi 方法自动生成 OpenAPI/Swagger 元数据,甚至可以生成客户端打字稿模型?
我发现 Swashbuckle 和 Swagger to JS & Typescript Codegen 很好,但我想知道是否还有其他库。
如果你能给出每种方法的优缺点,那就完美了。
【问题讨论】:
标签: .net asp.net-web-api typescript swagger
您还可以查看NSwag,这是一个适用于 .NET 和 TypeScript 的 Swagger 工具链。
该工具从现有的 Web API 控制器和基于这些 Swagger 规范的客户端代码生成 Swagger 规范。您可以使用回调或承诺、AngularJS 或 Angular2 为 JQuery 生成 TypeScript 客户端代码。生成的 DTO(请求/响应类型)可以是接口或类(具有日期转换、小驼峰大小写等)。
该项目可以与简单易用的桌面 GUI、构建脚本或命令行工具一起使用。
免责声明:我是 NSwag 的贡献者之一。
【讨论】:
请尝试Swagger-Codegen,这是一个免费的开源代码生成器,可根据 OpenAPI/Swagger 规范生成 REST API 客户端(例如 C#、TypeScript、Javascript 等)或服务器存根 (ASP.NET5)。
这是一个很好的起点:https://github.com/swagger-api/swagger-codegen#getting-started
对于typescript,Swagger Codegen 支持不同的库:typescript-node、typescript-angular、typescript-angular2 和typescript-fetch
【讨论】:
最终你想要的是 TypeScript 模型,而不是 Swagger 元数据。 ASP.NET Web API Client Generators 在 SDLC 期间可能比 Swagger 工具链更方便,开销更少。
虽然程序员通常使用 WebApiClientGen 来生成客户端 API 代码,但该项目还提供了 POCO2TS.exe,这是一个从 POCO 类生成 TypsScript 接口的命令行程序。您可以使用 Poco2ts.exe 或 poco2ts 组件将代码生成与构建管道集成。
【讨论】:
打字稿的openapi客户端生成器
npm install @cblx.br/openapi-typescript --save-dev
创建一个 openapi-typescript.config.js
var config = {
url: "<url>/swagger.json",
outputDir: "./src/client",
};
module.exports = config;
执行它:
npx openapi-typescript
角度示例:
创建一个 app-connector.ts
import { Injectable, Inject } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { OpenApiConnector } from '@cblx.br/openapi-typescript';
@Injectable({
providedIn: 'root'
})
export class AppConnector implements OpenApiConnector {
constructor(@Inject('BASE_URL') private baseUrl: string, private http: HttpClient) {}
async request(method: string, path: string, parameters: any, body: any) {
return await this.http.request(method, this.baseUrl + path, {
body: body,
params: parameters
}).toPromise();
}
}
openapi-typescript.config.js
var config = {
url: "<url>/swagger.json",
outputDir: "./src/client",
events: {
beforeWriteServiceClass: () => {
var content = '';
content += `import { Inject, Injectable } from '@angular/core';\n`;
content += `import { AppConnector } from 'app/app-connector';\n`;
content += `@Injectable({ providedIn: 'root' })\n`;
return content;
},
createConnectorDecorator: () => {
return `@Inject(AppConnector) `;
}
}
};
module.exports = config;
【讨论】: