【发布时间】:2021-12-30 08:13:31
【问题描述】:
我正在使用OpenApi 3。我使用的工具Owasp Zap 查看 OpenAPI 文档并创建虚假请求。当它收到 404 时,它会抱怨它没有 OpenAPI 承诺的媒体类型。
但我没有在 OpenAPI 文档中写任何关于如何处理 404 的内容。显然,我无法编写无限数量的错误端点并记录它们返回 404。
在 OpenAPI yaml 或 json 中记录此内容的正确方法是什么?
这是一个最小的 yaml 文件...我确信这个文件确实说明了 404,即。 404 不在合同中,因此工具抱怨 404 是有效响应,但 404 是资源丢失时网站应返回的内容
---
"openapi": "3.0.0"
paths:
/Foo/:
get:
responses:
"200":
content:
application/json:
schema:
$ref: "#/components/schemas/Foo"
default:
description: Errors
content:
application/json:
schema:
$ref: "#/components/schemas/Error"
components:
schemas:
Foo:
type: object
required:
- name
properties:
name:
type: string
Error:
type: object
required:
- error
properties:
error:
type: string
message:
type: string
data:
type: object
【问题讨论】:
-
这可能是您托管 API 的网络服务器的问题吗?
-
问题可能是任何事情。值得一提的是,它是一个 python 应用程序——在烧瓶之上的连接。
-
措辞似乎有点不清楚:ZAP 是按照模式(即使用指定的路径)还是随机路径生成请求?后一种情况似乎更像是工具的问题——您可以添加一个带有 404 响应的
/路径,但这似乎很麻烦,特别是因为 OpenAPI 只允许一个级别的模式匹配 (github.com/OAI/OpenAPI-Specification/issues/892) -
@ChrisAdams - 它还生成像 admin.php 这样的端点,然后抱怨它得到了 404。我会试试,我猜它相当于 "/{Param}" 其中 {Param } 是不存在的端点。
-
当 OpenAPI 的增强功能落地时肯定会很好,因为您可以记录例如一种常见的错误格式,但我将其归类为 ZAP 中的缺陷:如果它做了 API 合同没有说明它可以做的事情并获得标准状态码作为回报,那不是问题。
标签: swagger http-status-code-404 openapi