如果我的网络API不是简单的CRUD怎么办?

时间:2017-03-06 23:28:31

标签: .net asp.net-mvc rest asp.net-web-api

我对RESTful Web API最佳实践有一些疑问。

似乎标准是使用GETPUTPOST等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?接受的标准是否允许其他变化?有什么好的链接讨论这个吗?

1 个答案:

答案 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}}无关,那么您应该找到一些其他控制器将它们放入。