【问题标题】:Full typing with TypeScript and ASP.Net WebApi使用 TypeScript 和 ASP.Net WebApi 进行完整输入
【发布时间】:2016-06-01 09:07:16
【问题描述】:

是否有任何方法可以为 WebApi 方法自动生成 OpenAPI/Swagger 元数据,甚至可以生成客户端打字稿模型?

我发现 SwashbuckleSwagger to JS & Typescript Codegen 很好,但我想知道是否还有其他库。

如果你能给出每种方法的优缺点,那就完美了。

【问题讨论】:

    标签: .net asp.net-web-api typescript swagger


    【解决方案1】:

    您还可以查看NSwag,这是一个适用于 .NET 和 TypeScript 的 Swagger 工具链。

    该工具从现有的 Web API 控制器和基于这些 Swagger 规范的客户端代码生成 Swagger 规范。您可以使用回调或承诺、AngularJS 或 Angular2 为 JQuery 生成 TypeScript 客户端代码。生成的 DTO(请求/响应类型)可以是接口或类(具有日期转换、小驼峰大小写等)。

    该项目可以与简单易用的桌面 GUI、构建脚本或命令行工具一起使用。

    免责声明:我是 NSwag 的贡献者之一。

    【讨论】:

      【解决方案2】:

      请尝试Swagger-Codegen,这是一个免费的开源代码生成器,可根据 OpenAPI/Swagger 规范生成 REST API 客户端(例如 C#、TypeScript、Javascript 等)或服务器存根 (ASP.NET5)。

      这是一个很好的起点:https://github.com/swagger-api/swagger-codegen#getting-started

      对于typescript,Swagger Codegen 支持不同的库:typescript-nodetypescript-angulartypescript-angular2typescript-fetch

      【讨论】:

        【解决方案3】:

        最终你想要的是 TypeScript 模型,而不是 Swagger 元数据。 ASP.NET Web API Client Generators 在 SDLC 期间可能比 Swagger 工具链更方便,开销更少。

        虽然程序员通常使用 WebApiClientGen 来生成客户端 API 代码,但该项目还提供了 POCO2TS.exe,这是一个从 POCO 类生成 TypsScript 接口的命令行程序。您可以使用 Poco2ts.exe 或 poco2ts 组件将代码生成与构建管道集成。

        【讨论】:

          【解决方案4】:

          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


          角度示例:

          创建一个 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;
          

          【讨论】:

            猜你喜欢
            • 2020-11-21
            • 2017-07-04
            • 2014-08-27
            • 2012-10-12
            • 1970-01-01
            • 1970-01-01
            • 2012-06-07
            • 1970-01-01
            • 2020-06-11
            相关资源
            最近更新 更多