我在RESTful水域中坚持自己的脚趾,我无法找到一个“满意的”解决方案来解决如何在RESTful服务上处理真正的“动作”导向调用?我的quandry可以分为两部分。
1)事务性调用:我理解拥有一个ActionTransactor的想法,你也可以使用post获取资源,更新参数然后使用PUT进行提交(如所描述的那样在Orilly RESTful Web服务手册中) )..但我一直在努力保持URL永远存在状态。如果我们真的不需要永远保持事务,我们可以杀死资源URI吗? URI是否必须是perminate,或者它们是过期的转发URI
2)非事务性调用:这些调用可能是执行某些工作流程的调用,该工作流程跨越多个资源但是资源只是没有生成..例如,可能是重新生成一些计算的缓存值,如大型聚合或重新索引博客或一些这样的“纯粹”行动。
无论如何,我对社区对此的看法感到好奇......到目前为止,我已经读到Overloading Post是处理第2部分的最干净的方法。但是对于这种方法存在相同数量的论据。好。而且(对我来说)它不是自我记录,我认为这是RESTful API的关键设计目标之一。
答案 0 :(得分:1)
1)。永远保持URI与状态:考虑任何网站。它有一些页面。有些被删除,当我们尝试访问它们时,我们得到404。考虑一个数据库,比如客户。我们的RESTful访问器具有诸如http://myserver/customer/12345之类的URI - 如果客户已被破坏,那么我们可以返回404.对我来说似乎很合理。 URI是瞬态的,因为它们可能在语法上有效,但如果资源现在过时,则系统具有明确定义的行为。我认为,对于休息服务的错误处理是一个重要的考虑因素。我讨论了这个here
2)。似乎不太适合REST模型的操作:我不确定PUT或POST是否是最合适的方法。资源是请求做什么的想法怎么样?所以我们可以PUT / POST到
http://myserver/request/cacheupdate
这可以返回包含唯一ID的请求有效负载(就像创建客户可以返回包含系统生成的id的客户信息一样)。然后,可以使用请求资源来确定请求是否已完成,使用唯一ID。
http://myserver/request/12345
这使我们可以跟踪长时间运行的请求的状态。