使用 TypeScript 和 ASP.Net WebApi 进行完整打字
Full typing with TypeScript and ASP.Net WebApi
是否有任何方法可以为 WebApi 方法自动生成 OpenAPI/Swagger 元数据,甚至可以生成客户端打字稿模型?
我发现 Swashbuckle and Swagger to JS & Typescript Codegen 不错,但我想知道其他库。
如果能给出每种方法的优缺点就完美了。
请尝试 Swagger-Codegen,这是一个免费的开源代码生成器,用于生成 REST API 客户端(例如 C#、TypeScript、Javascript 等)或服务器存根 ( ASP.NET5) 给定 OpenAPI/Swagger 规格。
这是一个很好的起点:https://github.com/swagger-api/swagger-codegen#getting-started
对于typescript
,Swagger Codegen 支持不同的库:typescript-node
、typescript-angular
、typescript-angular2
和typescript-fetch
您还可以查看 NSwag,一个用于 .NET 和 TypeScript 的 Swagger 工具链。
该工具根据这些 Swagger 规范从现有 Web API 控制器和客户端代码生成 Swagger 规范。您可以使用回调或承诺、AngularJS 或 Angular2 为 JQuery 生成 TypeScript 客户端代码。生成的 DTO(request/response 类型)可以是接口或 类(带有日期转换、小驼峰式等)
该项目可以与简单易用的桌面 GUI、构建脚本或命令行工具一起使用。
免责声明:我是 NSwag 的贡献者之一。
openapi-typescript
打字稿的 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
Angular 示例:
创建应用-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;
最终您需要 TypeScript 模型,而不是 Swagger 元数据。 ASP.NET Web API Client Generators 在 SDLC 期间可能比 swagger 工具链更方便,开销更少。
虽然程序员通常使用 WebApiClientGen 生成客户端 API 代码,但该项目还提供 POCO2TS.exe,一个从 POCO 类 生成 TypsScript 接口的命令行程序。您可以使用 Poco2ts.exe 或 poco2ts 组件将代码生成与构建管道集成。
是否有任何方法可以为 WebApi 方法自动生成 OpenAPI/Swagger 元数据,甚至可以生成客户端打字稿模型?
我发现 Swashbuckle and Swagger to JS & Typescript Codegen 不错,但我想知道其他库。
如果能给出每种方法的优缺点就完美了。
请尝试 Swagger-Codegen,这是一个免费的开源代码生成器,用于生成 REST API 客户端(例如 C#、TypeScript、Javascript 等)或服务器存根 ( ASP.NET5) 给定 OpenAPI/Swagger 规格。
这是一个很好的起点:https://github.com/swagger-api/swagger-codegen#getting-started
对于typescript
,Swagger Codegen 支持不同的库:typescript-node
、typescript-angular
、typescript-angular2
和typescript-fetch
您还可以查看 NSwag,一个用于 .NET 和 TypeScript 的 Swagger 工具链。
该工具根据这些 Swagger 规范从现有 Web API 控制器和客户端代码生成 Swagger 规范。您可以使用回调或承诺、AngularJS 或 Angular2 为 JQuery 生成 TypeScript 客户端代码。生成的 DTO(request/response 类型)可以是接口或 类(带有日期转换、小驼峰式等)
该项目可以与简单易用的桌面 GUI、构建脚本或命令行工具一起使用。
免责声明:我是 NSwag 的贡献者之一。
openapi-typescript
打字稿的 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
Angular 示例:
创建应用-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;
最终您需要 TypeScript 模型,而不是 Swagger 元数据。 ASP.NET Web API Client Generators 在 SDLC 期间可能比 swagger 工具链更方便,开销更少。
虽然程序员通常使用 WebApiClientGen 生成客户端 API 代码,但该项目还提供 POCO2TS.exe,一个从 POCO 类 生成 TypsScript 接口的命令行程序。您可以使用 Poco2ts.exe 或 poco2ts 组件将代码生成与构建管道集成。