用于类RPC操作的RESTful URL

时间:2016-06-20 17:54:21

标签: c# rest asp.net-web-api restful-url

我正在使用ASP.NET Web API为DVD租赁网站实现RESTful API。域模型(简化)由CustomerSubscription个实体组成。客户有相关的订阅。

API公开的大多数操作都是简单的CRUD操作,这些操作很容易根据RESTful原则进行建模。例如。

GET /api/subscriptions/1 - get subscription with id 1
POST /api/subscriptions - add a new subscription
PUT /api/customers/2 - update customer with id 2 with contents of PUT body

通过将从数据库中读取的每个EndDate实体的Subscription字段与当前日期进行比较,需要定期检查过期订阅。对于已过期的每个订阅,应将关联客户的CustomerStatus字段设置为已存档,并将电子邮件发送给客户。该操作将通过我们的REST API公开,并且每天从外部服务调用。

我应该根据RESTful原则使用什么URL方案来公开此操作?我的第一个想法是它是api/customers/{SomeResource}上的PUT操作,因为它可能涉及更新零个或多个客户的CustomerStatus字段,并且也是幂等操作。

例如:

PUT /api/customers/expired

听起来合理吗?

请注意,此请求中没有发送正文,因为正在更新其雕像的客户将从数据库中查询,而不是由最终用户提供。我的理解是PUT请求不必包含正文。

1 个答案:

答案 0 :(得分:2)

这几乎肯定是POST操作。

但是,我质疑您的服务设计。为什么您描述的行为需要通过RESTful API进行外部控制?如果事先知道操作的确切时间和性质,为什么不使用其他一些安排工作的方法...这种方法更直接,不会提出这类问题?

参考:Stack Overflow

编辑:请注意,OP描述的操作不是幂等的,因此不是合格的PUT操作。

其他修改:note that the .Net framework uses the POST method by default for service endpoints marked with the WebInvoke attribute。每the documentation for this attribute,它表示“在逻辑上是一个调用操作”的端点。对我来说,这就像一个远程过程调用(即RPC)。