当前位置: 首页 > 知识库问答 >
问题:

如何使用OpenAPI和API平台正确描述请求体?

长孙宜
2023-03-14

我正在努力为Symfony Api平台中使用的请求正文获得正确的定义:

从上图中,我的endpoint期望的是包含必需值的JSON。我将必需值定义在路径中,但这不是真的,它们甚至不属于:查询标头cookie

我尝试了两种定义(并且删除了一些与解决方案无关的行):

// the definition result is on the first image on this post
resources:
  App\Entity\Cases:
    collectionOperations:
      case_assign:
        swagger_context:
          parameters:
            - name: assign_type
              in: path
              description: 'The assignee type: worker or reviewer'
              required: true
              type: string
            // ....
            - in: body
              name: body
              description: 'Object needed to perform a case assignment'
              required: true
              example: {
                          "assign_type": "worker",
                          "assigned_by": 1,
                          "assigned_to": 1,
                          "cases": {
                            "0": 109855,
                            "1": 109849,
                            "2": 109845
                          }
                        }

第二个定义看起来像:

resources:
  App\Entity\Cases:
    collectionOperations:
      case_assign:
        swagger_context:
          summary: 'Assign a worker or a reviewer to a case'
          parameters:
            - name: body
              in: body
              required: true
              schema:
                type: array
                items:
                  assign_type:
                    name: assign_type
                    description: 'The assignee type: worker or reviewer'
                    required: true
                    type: string

结果如下:

他们似乎都没有做我需要或期望的事情,我做错了什么?我能得到一些帮助吗?

我也读了几页/帖子,但没有找到一个好的例子或正确的方法(见下表):

  • https://github.com/api-platform/api-platform/issues/1019

共有1个答案

公良英资
2023-03-14

您可以使用文档中所述的招摇过市装饰器来覆盖生成的招摇过市。json并更改几乎任何您喜欢的内容。您需要编辑v2的定义

"paths": {
  "/todos": {
    "post": {
      "parameters": [
        {
          "name": "todo",
          "in": "body",
          "description": "The new Todo resource",
          "schema": {
            "$ref": "#/definitions/Todo"
          }
        }
      ]
}}}
"definitions": {
  "Todo": {
    "type": "object",
    "description": "",
    "properties": {
      "text": {
        "required": true,
        "description": "This text will be added to the schema as a description",
        "type": "string"
      },...

或者Openapi v3中的components.schemas:

"components": {
  "schemas": {
    "Todo": {
      "type": "object",
      "description": "",
      "properties": {  
        "text": {
          "required": true,
          "minLength": 4,
          "example": "some example text",
          "description": "This text will be added to the schema as a description",
          "type": "string"
        },...

您的另一个选择是使用@apirource或@ApiProperty注释的“swagger\u上下文”(“openapi\u上下文”用于openapi v3)。有效选项应在swagger文档中。

  /**
   * This text will be added to the schema as a description
   * @ApiProperty(
   *     swaggerContext={"required"=true},
   *     openapiContext={"required"=true, "minLength"=4, "example"="some example text"})
   * @ORM\Column(type="string", length=255)
   */
  private $text;

将导致:示例文档

编辑:我刚刚注意到您的yaml配置中有一个错误。您正在尝试为阵列设置文档。我假设你真的想发送一个对象

   parameters:
        - name: body
          in: body
          required: true
          schema:
            type: object
            required:             #only for swagger v2
               - assign_type
            properties:
              assign_type:
                description: 'The assignee type: worker or reviewer'
                required: true    #only for openapi v3
                type: string
              assigned_by:
                ...

您可以在此处检查数据类型的正确语法。

 类似资料:
  • 我正在用Swagger创建一个API文档。我直接尝试了openapi 3.0。不知何故,我无法得到我的请求机构工作的描述。 但这些描述不会出现: 我想得到像《大摇大摆2》那样的东西。下面是如何将相同的代码转换为Swagger 2

  • 我试图找到使用httr包通过R连接Appannie的API的方法(根本没有API连接的经验)。API要求包含来自appannie网站的请求标题引用:注册App Annie帐户并生成API密钥。将此密钥添加到您的请求标头中,如下所示: 授权:持有人“”引用 我写了这样的代码 命令http_status(getdata)显示我"客户端错误:(401)未经授权"有人能帮我吗,我做错了什么?

  • 有一个非正式的百度百科APIhttp://baike.baidu.com/api/openapi/BaikeLemmaCardApi?appid=379020&bk_key=uzi 对该API发起请求时,有一定概率返回 errno: 2错误信息,该错误表示什么意思?如何避免返回该错误?

  • 我正在学习带有 Api-Platform 的 OpenApi/Swagger API。我创建了一个新的endpoint,它接受枚举的值作为参数: 然而,这是一个相当常见的参数,值可以频繁更新(随着服务器的增加),我想使用某种模板。 所以我试着: 跟 或者 以及其他各种形式,都无济于事。 我试图理解组件的概念,但无法找到在Symfony/Api平台中使用它们的方法。 如何在不同的endpoint重用

  • 在实现之前,我正在考虑生成REST API的JSON响应的结构。我在SO上浏览了许多问答,阅读了许多文章、推荐和伪标准。 要求 通知客户一些有用的元信息-HTTP状态代码等。 分页和过滤信息-偏移,限制和过滤查询(API客户端知道影响结果的所有参数)。 关于数据采集的信息-集合中的总记录计数和返回项的数量。API客户端然后能够创建分页。 上一页和下一页的链接(只是考虑,不确定这是否适用于API客户

  • 该项目使用带有mongodb的Api平台。我有一个按lastName排序的Player文档。在5000名玩家中,它很有效。当我用200000名玩家进行测试时,我遇到了一个错误: 排序超出了104857600字节的内存限制,但没有选择外部排序。中止操作。Pass allowDiskUse:true表示选择加入。 我需要在请求的选项中添加“allowDiskUse: true”。 我试着将它直接添加到