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

如何在同一对象的开放API请求和响应中具有不同的必填字段?

孙阳旭
2023-03-14

我使用的是openapi 3.0.3版本,我们有scanario,我们不想让一个字段强制响应。下面是开放Api模式Snippit的示例。

例如,这里是MerchantDetails对象,其中“merchantName”和“merchantId”是必填字段。

MerchantDetails:
  description: Used to pass merchant specific data during the transaction.
  properties:
    merchantName:
      type: string
      maxLength: 64
    merchantId:
      type: string
      maxLength: 16
  required:
    - merchantName
    - merchantId

作为回应,我们使用相同的对象,但我们只希望根据需要保留一个字段“merchantId”。有没有办法在不创建新对象的情况下实现这一点?

MerchantDetails:
  description: Used to pass merchant specific data during the transaction.
  properties:
    merchantName:
      type: string
      maxLength: 64
    merchantId:
      type: string
      maxLength: 16
  required:
    - merchantId

共有1个答案

陈实
2023-03-14

您可以使用只读和写式关键字将特定属性标记为仅在响应中或仅在请求中。

如果“必需”列表中包含只读或写式属性,则必需仅影响相关范围–仅响应或仅请求。也就是说,只读必需属性仅适用于响应,而只写必需属性–仅适用于请求。

不确定是否所有工具都支持这些关键字。我已经测试过Redoc可以正确生成文档。

MerchantDetails:
  description: Used to pass merchant specific data during the transaction.
  properties:
    merchantName: 
      type: string
      maxLength: 64
      writeOnly: true  # only in request
    merchantId:
      type: string
      maxLength: 16
  required:
    - merchantName
    - merchantId

请阅读https://swagger.io/docs/specification/data-models/data-types/中的只读和只写属性部分

 类似资料:
  • 我使用的API根据成功/失败有不同的json响应。它们不是HTTP错误,而是json主体中的代码。 我添加了一个,但感觉我只是把事情放在一起,忽略了问题。这是一种可接受的或“pythonic”的方式来处理类似的不同响应吗?另外,如果存在状态,我是否正确地使用来跳过该行?

  • 我试图在Flutter应用程序中使用AWS DynamoDB,由于缺乏官方的AWS Dart SDK,我被迫使用低级别的HTTP REST API。 签署AWS HTTP请求的方法非常繁琐,但使用AWS提供的示例作为指导,我能够相对轻松地将Python转换为Dart。最终结果是两组代码产生相同的身份验证签名。 当我真的去发送请求时,我的问题来了。Python的工作原理与预期一致,但使用Dart的H

  • 我正在尝试创建一个基于网络的网络客户端。我根据网络站点中给出的示例编写了代码。但问题是,响应是由客户端处理程序处理的 我做的一件事是在HttpTarget中创建一个setResponse()方法 因此,基本上我想同步进行,即在HttpSnoopClient中发送一个请求(channel.writeandFlush(req)),然后等待,直到HttpSnoopCLientHandler收到响应 谁能

  • 我已经使用登录API在Jmeter中进行了测试。 为此,我通过了以下请求: 帖子网址:......POST数据参数:"电子邮件地址":"a@gmail.com","密码":"ad332017" 对于上述要求,我得到两种不同的答复。 邮递员:我收到回复,状态代码200 OK(这也是预期的) 在Jmeter上,我得到响应:响应代码:307响应消息:临时重定向。 谁能帮我解决这个问题?

  • 问题内容: 我在查询需要在SUM DISTINCT Rows处苦苦挣扎。一定有办法做到这一点…但我迷路了。 这是我得到的: 这给了我34行,为每个属于userid4的县提供了不同的人口数量,但是我怎么得到PopEstimate2005和EstimatesBase2000的总和? 类似的东西(但这不是合法的查询): 当然,将Zipcodes.CountyID添加到GroupBy的末尾后,我又回到了3

  • 我正在尝试使用Rest-Asure和Java为GET API创建测试自动化。 此API具有以下响应主体: 在此API响应中有两个同名“id”的字段。如何获取这两个字段的值? 谢谢