是的,在大多数情况下,RPC 风格的服务很好地映射到 REST。因此,CRUD 操作可以映射到任何好的地方。无论如何,我们可以在第一阶段识别合约方法,将它们映射到 URI 和不同的 HTTP 动词。第二阶段是引入资源,可能以 DTO 对象的形式存在。
无论如何,从 RPC 到 REST(很可能是第 2 级)的路线图在 Richardson 成熟度模型 (RMM) 上得到了很好的描述:
0 级: SOAP、XML RPC、POX、单一 URI
第 1 级: URI 隧道、许多 URI、单个动词
级别 2:许多 URI、许多动词、CRUD 服务(例如 Amazon S3)
第 3 级:第 2 级 + 超媒体 RESTful 服务
更多关于 RMM 的信息:
http://code.google.com/p/implementing-rest/wiki/RMM
http://martinfowler.com/articles/richardsonMaturityModel.html
但在我看来,你已经知道了。那么复杂的场景呢。他们有很多。作为问题的例子:
例如,我需要通知服务器下载一个 gravatar 图像并存储它。我不确定这如何适合 RESTful 端点。
我不认为它很难映射到 REST。一切都取决于细微差别。例如,当用户选择“gravatar”选项时,为什么在注册用户时不这样做。或者为什么不拥有 GET http://bookslirarysample.com/users/15/gravatar。REST 没有问题。
但也许您不仅假设 REST 端点或如何说服务器。当然,在 gravatar 下的功能不仅仅是 REST 调用。服务器上可能是消息总线,您的 REST 服务器通过它发送消息。特殊的“下载器”服务将收到此消息,下载图像,将其存储并保存到具有某些 id 的用户 oject。REST 并没有减少它背后的巨大服务器基础设施。REST 外观背后可能是复杂的企业级事件驱动架构。这对 REST 来说不是问题。
无论如何,还有更高级的场景。像通知聚合、事务、安全等。其中许多在 Jim Webber 的书中都有很好的描述:
REST 实践:超媒体和系统架构