我们可以define components in Swagger:
components:
schemas:
User:
properties:
id:
type: integer
name:
type: string
并稍后使用此组件:
responses:
'200':
description: The response
schema:
$ref: '#/components/schemas/User'
我想用它来避免重复内容。
我尝试在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”导入的)中找不到资源“ components”。有一个支持“ api_platform”类型的加载器。)
YAML加载程序似乎无法识别components
项。
如何在API平台中定义和使用引用?如何定义引用并在多个YAML文件中使用它?
答案 0 :(得分:1)
您不能那样做。
components
键属于Swagger / OpenAPI格式,而不属于API平台配置(映射)格式。 API平台配置文件和Swagger定义都可以用YAML编写,但是它们不相关。
因此,正如错误消息所描述的那样,无法像您尝试的那样将Swagger components
直接注入API Platform的配置文件中。
API平台的配置确实允许使用swagger_context
键在生成的Swagger文件中注入一些上下文,但是您不能在此结构之外编写随机Swagger定义(例如component
键)。
要做您想达到的swagger_context
键是不够的(必须在Swagger文件的根目录中注入组件,而swagger_context
是不可能的。)
您不必使用此键,而必须为Swagger文档生成器创建一个装饰器,如以下文档条目中所述:https://api-platform.com/docs/core/swagger/#overriding-the-swagger-documentation
Decorator允许访问整个Swagger结构,并对其进行修改。这样便可以添加components
结构。
答案 1 :(得分:0)
在我的例子中,我有实体检查器,我创建了两个组:
* @ApiResource(
* attributes={
* "normalization_context"={"groups"={"read"}},
* "denormalization_context"={"groups"={"write"}},
* },
然后在swagger_context响应中:
* "responses" = {
* "201" = {
* "description" = "....",
* "schema" = {
* "type" = "object",
* "properties" = {
* "myresult" = {
* "$ref"="#/definitions/Checker-read"
* }