我们有股票网站,我们帮助买家与卖家联系。我们正在创建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响应?
答案 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链接,另一种是不使用。
这仍然是你想要记录的东西,但基本上它是一个正确的实现。