Откройте Api $ ref, чтобы использовать URL - PullRequest
0 голосов
/ 28 октября 2019

У меня проблема с использованием open api v3 $ ref для вызова URL

Я написал спецификацию open api v3, чтобы получить документацию для приложения REST. Я использую $ ref для проверки входных параметров этой документации. Эти $ refs указывают на схему json в URL.

Это пример документации apen api:

(doc.yml)

  /myapi:
      get:
        description: Some Description
        parameters:
          - name: profile
            in: query
            description: Some description
            required: false
            schema:
              $ref: 'http://localhost:8089/refs#/properties/profile'

конечная точка http://localhost:8089/refs#/properties/profile возвращает

        "$schema": "http://json-schema.org/draft-07/schema#",
        "type": "object",
        "title": "Some Example",
        "definitions": {},
        "properties": {
            "profile": {
                "default": "",
                "examples": [
                    "1.0.0"
                ],
                "pattern": "^(\\d+\\.\\d+\\.\\d+)$",
                "type": "string",
                "title": "This is a version",
                "$id": "#/properties/profile"
            }
        },
        "$id": "myid1"
    }

Я скопировал и вставил doc.yml в swagger, и вход проверен, и все работает отлично.

Из-за изменений вконечная точка (http://localhost:8089/refs)

Я получаю этот ответ:

  "oneOf": [
    {
      "$ref": "id1"
    }
  ],
  "$schema": "http://json-schema.org/draft-07/schema#",
  "description": "Some Description",
  "type": "object",
  "$id": "someid",
  "definitions": {
    "id1": {
      "description": "Some description",
      "additionalProperties": false,
      "type": "object",
      "title": "Some Example",
      "properties": {
        "profile": {
          "default": "",
          "examples": [
            "1.0.0"
          ],
          "pattern": "^(\\d+\\.\\d+\\.\\d+)$",
          "type": "string",
          "title": "The Version Schema",
          "$id": "#/properties/profile"
        }
      },
      "$id": "id1"
    }
  }
}

После этого изменения Swagger выдает эту ошибку.

"Не удалось разрешить указатель # /properties / profile "

Мои вопросы. Можно ли продолжать использовать # / properties / profile в качестве идентификатора, когда схема использует oneOf? Как я могу сделать open api для проверки ввода, если схема jsonиспользуя oneOf? Нужно ли использовать другой путь, а не # / properties / profile?

1 Ответ

0 голосов
/ 28 октября 2019

Помните, что Open API использует свой собственный вариант JSON Schema . Это оставляет некоторые вещи, добавляет некоторые вещи и модифицирует некоторые вещи. В настоящее время Open API не поддерживает $id / id (ссылка: https://swagger.io/docs/specification/data-models/keywords/). Хорошая новость заключается в том, что вы не использовали $id каким-либо осмысленным образом, поэтому просто не указывайте его. Ваша ситуация.

Ваш $ref: 'http://localhost:8089/refs#/properties/profile' больше не работает, потому что этот путь больше не существует. Структура документа изменилась, поэтому фрагмент JSON Pointer должен использовать новую структуру. быть $ref: 'http://localhost:8089/refs#/definitions/id1/properties/profile'

...