REST:如果API发回两种类型的响应,它是否被认为是宁静的?

时间:2017-07-25 13:31:23

标签: rest api restful-architecture

我们有股票网站,我们帮助买家与卖家联系。我们正在创建API,让买家推送他​​们的联系方式并获取卖家详细信息。这是事务并记录在我们的数据库中。我们创建了以下API:

请求是POST,URL如下:

/api/leads

请求正文如下:

{
  "buyermobile": "9999999999",
  "stockid": "123"
}

回复如下:

{
  "sellermobile" : "8888888888",
  "selleraddress": "123 avenue park"
}

我们有新的要求,即我们需要发送回PDF网址(而不是“sellermobile”&“selleraddress”)。如果来自我们的客户,此PDF网址将包含卖家详细信息。

我们修改了相同的API,现在请求正文如下:

{
  "buyermobile": "9999999999",
  "stockid": "123",
  "ispdf": true
}

回复如下:

{
  "sellerdetailspdf" : "https://example.com/sellerdetails-1.pdf",
}

这样做是RESTFUL吗?或者我们应该创建单独的API以获取PDF响应?

3 个答案:

答案 0 :(得分:4)

我不会这样接近它。当您需要添加XLS时会发生什么?你添加" isxls"请求呢?

我考虑的事情:

使用mime类型进行内容协商。发布相同的请求,并在Accept标题中指定您期望的内容 - JSON,PDF等。然后您实际获取报告而不是报告的链接,这可能是也可能不是更好。

- 或 -

在典型的潜在客户响应中包含一个链接。

{
    "sellermobile" : "8888888888",
    "selleraddress": "123 avenue park",
    "_links": {
        "seller-details-pdf": "https://example.com/sellerdetails-1.pdf"
    }
} 

- 或 -

支持指定响应中类型的查询参数。

- 或 -

有一个属性指定响应中的类型,而不是布尔值。添加新响应类型时要扩展得更清晰。

前两个选项有奖励,您不需要客户端处理单个请求的多个响应类型。任何规范都不禁止这样做,但这对客户来说很烦人。尽量不要惹恼你想要付钱给你的人。 :)

答案 1 :(得分:1)

再一次,实现对我来说很好,但是你可能会看到打破PDF URL到另一个端点的返回可能像api/lead/pdf那样api/lead的请求体是相同的/lead下的所有后续端点。允许您的路由和其他代码处理小部分任务,而不是拥有处理多个标志和多个代码路由的路由。

答案 2 :(得分:0)

对我来说这看起来不错 - 相同类型的输入应该提供相同类型的响应,但在您的情况下,您有两种不同类型的输入 - 一种带有“ispdf”标志,另一种没有。因此,使用两种不同类型的响应进行响应是一致的,一种是使用PDF链接,另一种是不使用。

这仍然是你想要记录的东西,但基本上它是一个正确的实现。