是否可以根据请求正文参数在API响应中发回两个不同的资源?

时间:2017-07-26 20:41:57

标签: rest api restful-architecture

我们有一个网站连接买家和卖家的货物。

我们正在设计POST API以吸引买家对任何卖家产品的兴趣。 API Uri和请求正文如下:

/api/lead/
{
   "name":"xyz",
   "mobile": "00984343",
   "stockid":4
}

API是POST,因为我们会将此信息保存在数据库中。

目前,如果“stockid”是属于我们的高级客户的库存,则API会在API响应正文中发回卖家详细信息:

{
  "sellername":"abc",
  "sellermobile":"75654647",
  "selleraddress": "faje street, curl"
}

如果“stockid”是属于我们普通客户的库存,API会在API响应正文中发回该产品的完整详细信息(并且不会发回卖家详细信息)

{
  "description": "good 2nd hand mobile",
  "purchasedate": "24 july,2017",
  "purchaseprice": "10000"
}

同一个POST API根据库存ID发回2种不同类型的资源(一种是卖家详情,另一种是库存详情)。

以这种方式设计API是否安静,即POST API根据某些请求体参数发回多种类型的响应?

1 个答案:

答案 0 :(得分:0)

这种做法看起来有问题。我个人不会这样做。

建议1:回复正常客户的产品详情,以及产品卖家详细信息的详细信息,作为回复丰富的形式。有了这两个响应大多是一致的,你仍然有你想要的功能。

编辑:添加了我想到的更多建议。

建议2:由于这些响应基本不同,可能应该由不同的资源返回。在这种情况下,请不要在POST期间返回数据,只需使用id来调用ListView<ListView Style="{StaticResource BlurredHeaderListViewStyle}"> <ListView.HeaderTemplate> <DataTemplate> <sampleapp:CustomHeader /> </DataTemplate> </ListView.HeaderTemplate> <ListView.ItemTemplate> <DataTemplate> </DataTemplate> </ListView.ItemTemplate> </ListView> 等会返回响应的内容,如果id对特定资源无效,则调用api/seller/{stockid}。在缺点的情况下,您需要进行多次调用,这会使架构变得复杂。

建议3:为了避免完全不同的响应对象,这会让人感到困惑并使客户端更难以映射它们,请使用一些包装器对象来提供一些“type”属性和你的对象。类似的东西:

api/product/{stockid}

不完美,但在我看来,两种完全不同的反应要好。