OpenAPI Generator:如何按标签选择或跳过指定API生成
问题描述
我有一个包含大量带标签API方法的大型OpenAPI文件,示例如下:
tags: - name: Marketplace API description: APIs used in order to use Marketplace Payment Flow - name: Payment API description: Payment API V4. If your integration is using API V2, <a href="/docs/api-migration/payments/">go to migration guide</a>. - name: Payouts API description: This API allows a merchant to make transfers using a card or a token. He can also retrieve info about past payouts or the current payout balance.
请问是否存在生成器参数或其他方式,可跳过不需要生成的API?我的当前生成命令如下:
for generator in $(cat generator-list.txt) do npx @openapitools/openapi-generator-cli generate \ --input-spec https://***/docs/swagger/api/v4/docs.yml \ --generator-name ${generator} \ --output ./client_${generator} \ --verbose done
解决方案
当然有办法,OpenAPI Generator提供了直接的参数来控制要生成的API标签,也有其他替代方案:
1. 使用官方参数过滤标签
方式一:只生成指定标签的API
用--tag参数(可多次使用)指定需要保留的标签,比如只想生成Payment API和Payouts API:
for generator in $(cat generator-list.txt) do npx @openapitools/openapi-generator-cli generate \ --input-spec https://***/docs/swagger/api/v4/docs.yml \ --generator-name ${generator} \ --output ./client_${generator} \ --verbose \ --tag "Payment API" \ --tag "Payouts API" done
方式二:排除不需要的标签
用--exclude-tag参数(可多次使用)跳过不想生成的标签,比如排除Marketplace API:
for generator in $(cat generator-list.txt) do npx @openapitools/openapi-generator-cli generate \ --input-spec https://***/docs/swagger/api/v4/docs.yml \ --generator-name ${generator} \ --output ./client_${generator} \ --verbose \ --exclude-tag "Marketplace API" done
2. 其他替代方案
修改OpenAPI文件
如果不想每次命令都加参数,可以直接编辑OpenAPI YAML文件,删除不需要的标签及其对应的API路径;或者给不想生成的API加上x-codegen-ignore: true扩展字段,生成器会自动跳过这些API:
paths: /marketplace/xxx: get: x-codegen-ignore: true tags: - Marketplace API # 其他API定义...
使用配置文件
创建一个config.yaml配置文件,在里面指定includeTags或excludeTags,然后用--config参数引入:
# config.yaml includeTags: - Payment API - Payouts API # 或者用excludeTags: # excludeTags: # - Marketplace API
命令修改为:
for generator in $(cat generator-list.txt) do npx @openapitools/openapi-generator-cli generate \ --input-spec https://***/docs/swagger/api/v4/docs.yml \ --generator-name ${generator} \ --output ./client_${generator} \ --verbose \ --config config.yaml done
内容的提问来源于stack exchange,提问作者Alex Babak
相关产品推荐
相关产品推荐

