Swagger UI 2.1 застрял " выборка списка ресурсов"


У меня есть RESTful API, который я недавно создал, и я не буду помнить, как использовать его через несколько месяцев. Я решил документировать свой API с помощью Swagger, однако я схожу с ума.

Я http://editor.swagger.io/, чтобы создать YAML файл, который потом конвертировать в JSON-файла развязностью можете использовать. Когда я помещаю файл в Swagger UI, он просто застревает на fetching resource list: localhost/swagger.json, а консоль говорит Uncaught TypeError: Cannot read property '$ref' of undefined .

Введите описание изображения здесьВведите описание изображения здесь

Я использую версию 2.1.0-alpha.5 из Swagger UI.

Здесь это мой файл спецификации:

swagger: '2.0'
info:
  title: TITLE
  description: BLAH, BLAH, BLAH, ETC
  version: "1.0b"
host: api.example.com
schemes:
 - http
basePath: /v1
produces:
 - application/json
paths:
  /match.json:
    get:
     #summary: Match Data
      description: Used for getting data about a match
      parameters:
        - name: id
          in: query
          description: The match ID of from a game
          required: true
          type: integer
          format: int32
        - name: key
          in: query
          description: API key used for authentication.
          required: true
          type: string
      responses:
        200:
          description: Returns match data
          schema:
            type: array
            items:
              $ref: '#/definitions/MatchData'
        default:
          description: Unexpected error
          schema:
            $ref: '#/definitions/Error'

definitions:
  MatchData:
    properties:
      info:
        type: integer
        format: int64
        description: General information about the match
      time:
        type: integer
        format: int64
        description: Information about the start/end time
      stats:
        type: array
        format: int64
        description: Stats about the match
  Error:
    required:
     - errorID
      - message
    properties:
      errorID:
        type: string
        description: Error ID.
      message:
        type: string
        description: Information about the error.
3 7

3 ответа:

Я проверил вашу спецификацию, и хотя я не получаю ту же ошибку, что и вы, спецификация действительно недействительна.

Если вы посмотрите на #/definitions/MatchData/properties/stats, вы увидите, что вы определяете type: array, но вы не предоставляете свойство items рядом с ним, чтобы сказать, какой это массив (и это обязательно). Возможно, вы намеревались использовать type: integer, как свойства над ним, которые идут вместе с format: int64.

Поскольку я не знаю, что вы намеревались предоставить, трудно дать точное решение, но если вы добавите комментируя то, что вы намеревались сделать, я мог бы дать более подробный ответ.

После некоторого дополнительного тестирования я обнаружил, что в пользовательском интерфейсе есть ошибка. После внесения этой модификации и загрузки спецификации сама операция не будет расширяться, если вы не нажмете на ссылку Expand Operations. Я открыл выпуск об этом, не стесняйтесь следовать ему там.

Эта проблема может быть вызвана некоторыми ошибками отступов в файле yaml, которые на самом деле не появились в Редакторе Swagger. Проверьте все ваши определения и то, отображаются ли они должным образом в предварительном просмотре, который вы можете увидеть в Редакторе Swagger (особенно проверьте MatchData).

Вы также можете попробовать дать:

responses:
200:
  description: Returns match data
  schema:
    type: array
    items:
      schema:
        $ref: '#/definitions/MatchData'

В нашем случае мы использовали Swagger-php, и у нас есть: * @SWG\ответ( * отклик=200, * описание= " ответ приложения" * @\Схема РПД( * тип= " массив" * ) * ),

Но мы пропустили "* @SWG\Items(ref= "# / definitions/pet")". После удаления "@SWG\Schema (", он работает, например,

 *     @SWG\Response(
 *         response=200,
 *         description="app response"
 *     ),