Как использовать ссылку "$ ref" и объявить компоненты из Swagger в платформе API? - PullRequest
0 голосов
/ 18 октября 2018

Мы можем определить компоненты в Swagger :

components:
  schemas:
    User:
      properties:
        id:
          type: integer
        name:
          type: string

И использовать этот компонент позже:

responses:
  '200':
    description: The response
    schema: 
      $ref: '#/components/schemas/User'

Я хочу использовать это, чтобы избежать дублированияcontent.


Я пытаюсь использовать этот синтаксис в платформе API:

components:
    schemas:
        Part:
            description: Array of Part
            type: array
            items:
                type: object
                properties:
                    name:
                        type: string

App\Entity\Item:
    collectionOperations:
        post:
            method: 'POST'
            swagger_context:
                parameters:
                    - name: body
                      description: Item data
                      in: body
                      schema:
                          type: object
                          properties:
                              name:
                                  description: Part
                                  type: string
                                  required: true
                              part:
                                  $ref: '#/components/schemas/Part'

Это выдает ошибку:

Исключение, возникающее при обработкеисключение (Symfony \ Component \ Config \ Exception \ FileLoaderLoadException: ресурс "компоненты" не найден в. (который импортируется из "/app/config/routes/api_platform.yaml"). Убедитесь, что имеется загрузчик, поддерживающий "api_platform""type.)

Похоже, что загрузчик YAML не распознает элемент components.


Как определить и использовать ссылки в API Platform?Как определить ссылку и использовать ее в нескольких файлах YAML?

1 Ответ

0 голосов
/ 19 октября 2018

Вы не можете сделать это следующим образом.

Ключ components относится к формату Swagger / OpenAPI, а не к формату конфигурации (сопоставления) платформы API.Как файлы конфигурации API-платформы, так и определения Swagger могут быть записаны в YAML, но они не связаны между собой.

Таким образом, как описано в сообщении об ошибке, Swagger components не может быть введен непосредственно в файлы конфигурации API-платформы, так как выtry to do.

Конфигурация API Platform позволяет вводить некоторый контекст в сгенерированный файл Swagger с помощью ключа swagger_context, но вы не можете писать случайные определения Swagger (например, ключ component) внеэта структура.

Чтобы выполнить то, что вы хотите достичь, ключа swagger_context будет недостаточно (компоненты должны быть внедрены в корень файла Swagger, а с swagger_context это невозможно).

Вместо использования этого ключа вам нужно будет создать декоратор для генератора документации Swagger, как описано в этой записи документации: https://api -platform.com / docs / core / swagger / # overriding-the-swagger-документации

Декоратор позволяет получить доступ ко всей структуре Swagger, а также изменить егот.Таким образом, вы сможете добавить свою components структуру.

...