RPC的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

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

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

例如:

PUT /api/customers/expired

这听起来合理吗?

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


这几乎可以肯定是一个POST操作。

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

参考:堆栈溢出

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

附加编辑:请注意,.Net框架默认为使用WebInvoke属性标记的服务端点使用POST方法。 根据此属性的文档,它表示“逻辑上是调用操作”的端点。 对我来说,这看起来像一个远程过程调用(即RPC)。

链接地址: http://www.djcxy.com/p/41045.html

上一篇: RESTful URL for RPC

下一篇: Need help adding API PUT method to Python script