REST调用的RESTful表示

时间:2014-02-18 13:54:21

标签: rest

我们正在尝试将SOAP API重新设计为RESTful(使用ASP.NET Web Api)。

我知道如何用REST替换RPC样式的调用的问题出现了很多,但我仍然没有发现任何能让我满意的东西。这可能是想象力的失败或对REST原则的根本误解(我会让你做出判断!)

我在下面创建了一个示例,它大致映射到我想要实现的那种东西。

假设我们有一个资源,我称之为预订

  

GET ... /预订/预订/ 1

我们要求取消此预订,此预订之前会以类似的方式建模。

  

... CancelBooking(1,Reasons.NoLongerRequired)

所以这是预订ID和原因码。

或者我们可能需要能够在一个请求中取消多个预订。

  

... CancelBooking(“1,2,3”,Reasons.NoLongerRequired)

(有点粗糙,但我试图保持这个例子的简单!)

我们如何在RESTful架构中对此进行最佳建模?

一个建议是我们有一个名为CancellationRequest的资源,我们将其中一个POST到服务器?

POST .../Bookings/CancellationRequest    
{
  "BookingIDs" : "1,2,3",   
  "CancellationReason" : "NotRequired"
}

也许这会处理,然后返回重定向到已取消的预订?

但我不知道这是否是REST方面的最佳方法。

任何人都可以提供建议吗?

1 个答案:

答案 0 :(得分:2)

(注意:说/Bookings/Booking/:id是多余的。我也认为资源应该以小写字母开头。在这种情况下,你将资源称为/bookings/:id)。

设计师对于正确的方法有很多意见。我个人并不喜欢如此严格地遵守RESTful惯例,因为它使API变得很容易或难以理解。

但是,你的情况似乎非常简单:

多种资源:

DELETE /bookings?reasonCode=Reasons.NoLongerRequired&id=1&id=2&id=3

单一资源:

DELETE /bookings?reasonCode=Reasons.NoLongerRequired&id=1

退化为

DELETE /bookings/:id?reasonCode=Reasons.NoLongerRequired

另见Patterns for handling batch operations in REST web services?