Openapi3 和 CSV 响应(针对 Dredd)
Openapi3 and CSV response (for Dredd)
我用 DREDD 测试我的 Api 是否符合其规范(考虑到 painfull limitations of Support by Dredd considered 是用 Openapi3 编写的)。不,我有一个端点,如果设置了 Accept-header,它会产生 CSV-data。
'/my-endpoint':
summary: ...
description: ...
get:
# parameters:
# -
# in: header
# name: Accept
# description: "Response format: application/json or text/csv"
# example: "text/csv"
responses:
'200':
description: ...
content:
text/csv:
schema:
type: string
example:
summary: 'csv table'
value: 'cell1, cell2'
当我 运行 使用 Dredd 进行测试时,测试失败
expected:
headers:
body:
[
{
"key": "summary",
"value": "csv table"
},
{
"key": "value",
"value": "cell1, cell2"
}
]
statusCode: 200
显然有些东西被误解了,Dredd 仍然期望 JSON。 API 也没有被告知生成 CSV 版本。如果我在上面的代码中提交接受 header,我会得到完全相同的结果——上面的预期结果和实际结果 my-endpoint-data 的 JSON 版本以及广告警告:
warn: API description parser warning in .../tmp/transformed.specs.yml: 'Parameter Object' 'name' in location 'header' should not be 'Accept', 'Content-Type' or 'Authorization'
我阅读了 here and here: Header parameters named Accept, Content-Type and Authorization are not allowed. To describe these headers, use the corresponding OpenAPI keywords
- but what are they? According to this and this 页面,它似乎足以指定给定类型的响应,但这显然不足以告诉 Dredd 产生这样的 header。
你收到一个错误,因为 example
键的值是一个文字示例值。因此,在您的情况下,它被视为具有 summary
和 value
属性的对象。
将您的定义更改为:
content:
text/csv:
schema:
type: string
example: 'cell1, cell2'
或者,如果您想提供 summary/description 作为示例,请改用 examples
:
content:
text/csv:
schema:
type: string
examples:
csv table:
summary: A CSV table with 2 cells
value: 'cell1, cell2'
我用 DREDD 测试我的 Api 是否符合其规范(考虑到 painfull limitations of Support by Dredd considered 是用 Openapi3 编写的)。不,我有一个端点,如果设置了 Accept-header,它会产生 CSV-data。
'/my-endpoint':
summary: ...
description: ...
get:
# parameters:
# -
# in: header
# name: Accept
# description: "Response format: application/json or text/csv"
# example: "text/csv"
responses:
'200':
description: ...
content:
text/csv:
schema:
type: string
example:
summary: 'csv table'
value: 'cell1, cell2'
当我 运行 使用 Dredd 进行测试时,测试失败
expected:
headers:
body:
[
{
"key": "summary",
"value": "csv table"
},
{
"key": "value",
"value": "cell1, cell2"
}
]
statusCode: 200
显然有些东西被误解了,Dredd 仍然期望 JSON。 API 也没有被告知生成 CSV 版本。如果我在上面的代码中提交接受 header,我会得到完全相同的结果——上面的预期结果和实际结果 my-endpoint-data 的 JSON 版本以及广告警告:
warn: API description parser warning in .../tmp/transformed.specs.yml: 'Parameter Object' 'name' in location 'header' should not be 'Accept', 'Content-Type' or 'Authorization'
我阅读了 here and here: Header parameters named Accept, Content-Type and Authorization are not allowed. To describe these headers, use the corresponding OpenAPI keywords
- but what are they? According to this and this 页面,它似乎足以指定给定类型的响应,但这显然不足以告诉 Dredd 产生这样的 header。
你收到一个错误,因为 example
键的值是一个文字示例值。因此,在您的情况下,它被视为具有 summary
和 value
属性的对象。
将您的定义更改为:
content:
text/csv:
schema:
type: string
example: 'cell1, cell2'
或者,如果您想提供 summary/description 作为示例,请改用 examples
:
content:
text/csv:
schema:
type: string
examples:
csv table:
summary: A CSV table with 2 cells
value: 'cell1, cell2'