英文:
How to include the x-implements flag in internal Openapi YAML models only?
问题
以下是您要翻译的内容:
我正在使用 x-implements 标志来定义我的 openapi 模式,如下所示:
paths:
/pets:
get:
summary: 列出所有宠物
operationId: 列出宠物
tags:
- 宠物
responses:
'200':
description: 一组宠物。
content:
application/json:
schema:
type: 数组
items:
$ref: '#/components/schemas/宠物'
components:
schemas:
宠物:
x-implements: ['com.petstore.PetInterface']
type: 对象
required:
- 名称
properties:
id:
type: 整数
format: int64
名称:
type: 字符串
标签:
$ref: '#/components/schemas/标签'
我已经在我的代码中定义了 com.petstore.PetInterface
。我正在使用 maven-openapi-generator 生成代码,这对于我的内部使用很有效。然而,我将要将 openapi 文件交给客户,他们没有这个接口。如何处理这个问题?我考虑了以下解决方案:
- 在交付文件给客户之前(手动)删除 x-implements 标志。
- 创建内部和外部模式,但我认为这会导致大量的代码重复。
是否有更好的解决方案?谢谢。
英文:
I am using use the x-implements flag for my openapi schema as follows:
paths:
/pets:
get:
summary: List all pets
operationId: listPets
tags:
- pets
responses:
'200':
description: A list of pets.
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Pet'
components:
schemas:
Pet:
x-implements: ['com.petstore.PetInterface']
type: object
required:
- name
properties:
id:
type: integer
format: int64
name:
type: string
tag:
$ref: '#/components/schemas/Tag'
I have defined the com.petstore.PetInterface
in my code. I am generating the code with the maven-openapi-generator and this all works fine for my internal usage. However, I am going to deliver the openapi file to the customer and they don't have this interface. How to deal with this? I was thinking about the following solutions:
- delete the x-implements flag (manually) before delivering the file to the customer
- create an internal and external schema, but I guess this results in a lot of code duplications
Are there any better solutions? Thanks.
答案1
得分: 0
我正在考虑以下解决方案:
- 在将文件交付给客户之前(手动)删除x-implements标志
这听起来不错,似乎是常见情况,因为存在诸如openapi-filter
和openapi-format
之类的工具。
在你的情况下,你可以使用yq
自动删除x-implements
键。下面是针对yq
v4 的示例;-i
标志会原地更新输入文件:
# Bash
yq -i 'del(.components.schemas.*["x-implements"])' openapi.yaml
# Windows CMD
yq -i "del(.components.schemas.*[\"x-implements\"])" openapi.yaml
英文:
> I was thinking about the following solutions:
> 1. delete the x-implements flag (manually) before delivering the file to the customer
This sounds fine and seems to be a common use case, given that tools like openapi-filter
and openapi-format
exist.
In your case, you can automate the deletion of the x-implements
key by using yq
. The example below is for yq
v4; the -i
flag updates the input file in-place:
# Bash
yq -i 'del(.components.schemas.*["x-implements"])' openapi.yaml
# Windows CMD
yq -i "del(.components.schemas.*[\"x-implements\"])" openapi.yaml
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论