我们正在尝试将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方面的最佳方法。
任何人都可以提供建议吗?
答案 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?