我正在尝试根据可以在此处此处找到的未知错误格式制定自定义规则。以这个 Open API 文档为例:
openapi- generated.yaml
openapi: 3.0.3
info:
title: API
version: 1.0.0
servers:
- url: https://api.com/
paths:
/:
get:
tags: []
summary: Your GET endpoint
description: Your GET endpoint
operationId: get-endpoint
responses:
"500":
description: Error
content:
application/json:
schema:
properties:
errorDescription:
type: string
以及此规则集:
.spectral.yml
extends:
- https://raw.githubusercontent.com/openapi-contrib/style-guides/master/apisyouwonthate.yml
rules:
unknown-error-format: error
跑步时
spectral lint --ruleset .spectral.yml openapi-generated.yaml
我期待返回错误,因为 500 响应内容是
application/json
,而不是允许的值 application/vnd.api+json
、application/problem+xml
和 application/problem+json
之一。
相反,没有发现错误:
No results with a severity of 'error' or higher found!
我尝试了其他一些 Spectral 核心函数,这些函数应该会使 linter 返回错误,但事实并非如此。我怀疑给定的表达式在内部没有返回正确的结果。
此外,我尝试使用此 JSON 路径演示 来检查是否为给定规则中的路径返回带有“application/json”的输出数组。确实如此。
这个规则有问题还是我做错了什么?
我正在使用 Spectral 版本 6.1.0。
提前致谢。
我敢打赌存在文件名/全局问题,默认情况下,如果找不到要测试的文件,spectrum 将返回成功。制定一条始终返回某些内容以确保您的测试有效的规则会很方便。
使用
--fail-on-unmatched-globs
命令行选项运行它,如果找不到文件,将返回错误。
示例中的完整命令:
spectral lint --fail-on-unmatched-globs --ruleset .spectral.yml openapi-generated.yaml
对于这个问题,规则所在的github已经重命名了文件。这是重命名之前文件的深层链接:https://github.com/apisyouwonthate/style-guide/blob/06bd2f71f676edc7ed56b8fbe1c35ba971d16665/apisyouwonthate.yml.