我对RESTful Web API最佳实践有一些疑问。
似乎标准是使用GET
,PUT
和POST
等HTTP协议来简化界面。
GET / tickets - 检索票证列表
GET / tickets / 12 - 检索特定的票据
POST / ticket - 创建新票证 PUT / ticket / 12 - 更新票#12
PATCH / tickets / 12 - 部分更新票#12
DELETE / tickets / 12 - 删除门票#12
但是在花了一段时间开发我的第一个API之后,我真的觉得它没有落入这么整洁的设计中。
我的API支持添加或更新LineItem
,并且调用者可以一次添加或更新任意数量的LineItem
个。此外,他们可以确认或取消任何号码。在添加和更新的情况下,还提供了许多其他相关数据。对于确认或取消,需要更少的数据。
那么这如何适应上述故障单界面?我是否创建了一个糟糕的Web API?接受的标准是否允许其他变化?有什么好的链接讨论这个吗?
答案 0 :(得分:1)
您可以让类上的方法执行比整个对象上的CRUD任务更具体的任务。因此,假设您的Ticket
对象也包含订单项,您可能会有一个PUT调用URI,如:
PUT / tickets / 12 / LineItem?name = BLAH& address = FOO
在代码中,您的方法将类似于
public class TicketController
{
[HttpPut]
[ActionName("LineItem")]
public HttpResponseMessage UpdateLineItem(int id, string name, string address)
{
// Do stuff here.
}
}
显然,你也可以在那里使用其他方法。您可能想要修改它,以便您的订单项信息通过PUT或POST正文而不是通过URI进入,但是显示URI参数的工作方式也很有用。
但是,如果问题的LineItem
与<{1}}无关,那么您应该找到一些其他控制器将它们放入。