我正在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响应。
答案 0 :(得分:0)
您必须在API平台中以一种宁静的方式呼叫您的路线,如下所示:
GET /resource-name/id/resource-name/id
所以你应该这样做:
GET /shops/{shop-identifier}/books?title=sometitle
如果有效,请告诉我,并始终记住遵循REST标准。