如何在路径中设置变量 - API平台

时间:2018-04-26 13:33:15

标签: symfony swagger api-platform.com

我正在Symfony中创建小型API,我正在使用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,如果我在实体中输入固定值,从配置和路由中删除参数,url 127.0.0.1/api/books?title=sometitle工作正常,我得到完整的Hydra Json响应。

1 个答案:

答案 0 :(得分:0)

您必须在API平台中以一种宁静的方式呼叫您的路线,如下所示:

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

所以你应该这样做:

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

如果有效,请告诉我,并始终记住遵循REST标准。