用于指定不同响应模型的API设计模式

时间:2016-01-07 16:16:29

标签: api swagger api-design

我正在尝试粗略地删除api以返回文章内容。能够指定我们是否需要整篇文章,摘要或可能在该内容上的其他变体似乎很有价值。

我的直觉是将查询参数添加到像dataModel这样的GET请求中(随意提出更好的名称)。例如,默认值可能是整篇文章,但summary可能只是id,title和&说明,list可能会返回ID,标题,作者和& lastModifiedDate。

  • / V0 /物品/ {ID}
  • / V0 /物品/ {ID}?的DataModel =摘要
  • / V0 /物品/ {ID}?的DataModel =列表

但是我们使用Swagger作为文档,而Swagger似乎不支持根据查询参数(see this)返回不同的对象。所以我想知道是否有其他已建立的模式同样可以接受?

2 个答案:

答案 0 :(得分:3)

使用Swagger的正确解决方案是创建一个包含所有数据模型的公共属性的返回类型。然后,您可以对discriminator进行建模,并使用allOf构造来创建正确的响应类型。

如果您在此处查看示例定义:

https://swaggerhub.com/api/swagger-tutorials/modeling-samples/1.0.0

您将了解如何使用Animal返回类型以及CatDog具体类型完成此操作。

答案 1 :(得分:0)

一种解决方法是使用路径变量而不是dataModel的URL查询字符串,而是使用以下路由

  • / V0 /物品/ {ID}
  • / v0 / articles / {id} / summary(返回带有ID,标题和说明的模型)
  • / v0 / articles / {id} / list(返回带有id,title,author和& lastModifiedDate的模型)