Как установить переменную в пути - Платформа API - PullRequest
0 голосов
/ 26 апреля 2018

Я создаю небольшой API в Symfony и использую платформу Api.

В /src/BooksBundle/Resources/config/api_resources/resources.xml Я установил путь к:

<collectionOperations>
    <collectionOperation name="get">
        <attribute name="method">GET</attribute>
        <attribute name="path">/{shop}/books</attribute>
        <attribute name="normalization_context">
            <attribute name="groups">
                <attribute>books_list</attribute>
                <attribute>list</attribute>
            </attribute>
        </attribute>
    </collectionOperation>
</collectionOperations>

В swagger.yml я установил путь и параметр

paths:
/api/{shop}/books:
  get:
    tags:
      - Book
    operationId: getBookCollection
    produces:
      - application/json
      - application/ld+json
      - text/html
    summary: Retrieves the collection of Book resources.
    responses:
      '200':
        description: Book collection response
        schema:
          type: array
          items:
            $ref: '#/definitions/Book-book_list'
      '401':
        description: Unauthorized
    parameters:
      - name: title
        in: query
        required: false
        type: string
      - name: shop
        in: path
        required: true
        type: string

Мой маршрут, например: 127.0.0.1/api/shopName/books?title=sometitle и в ответ я получаю эту ошибку: Unable to generate an IRI for "BookBundle\Entity\Book".

Я исследовал исключение, и сообщение: Some mandatory parameters are missing ("shop") to generate a URL for route "api_books_get_collection".

Поэтому мне нужен способ отправки параметров через путь в платформе API, потому что по какой-то причине это не работает.


Просто для информации, почему я думаю, что это проблема конфигурации. Мой параметр Shop in entity Book, есть getter и setter, и если я установлю фиксированное значение в entity, удалим параметр из конфигурации и маршрута, url 127.0.0.1/api/books?title=sometitle будет работать отлично, и я получу полный ответ Hydra Json.

1 Ответ

0 голосов
/ 26 апреля 2018

Вы должны называть свой маршрут в API Platform спокойным образом, например:

GET /resource-name/id/resource-name/id

Так что вы, вероятно, должны сделать:

GET /shops/{shop-identifier}/books?title=sometitle

Дайте мне знать, если это работает, и всегда не забывайте следовать стандарту REST.

...