使用 Stoplight Spectral CLI 为应用程序/问题+json 自定义规则

问题描述 投票:0回答:1

我正在尝试根据可以在此处此处找到的未知错误格式制定自定义规则。以这个 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。

提前致谢。

openapi lint spectral stoplight
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.

© www.soinside.com 2019 - 2024. All rights reserved.