REST vs JSON

我试图在REST和JSON-RPC之间选择开发一个Web应用程序的API。 哪一个更容易用于API客户端?

2015年更新:我发现REST更易于开发和使用在Web / HTTP上提供的API,因为API可以利用客户端和服务器都了解的现有成熟的HTTP协议。 例如响应代码,标题,查询,帖子主体,缓存和许多其他功能都可以被API使用,无需任何额外的努力或设置。


RPC的根本问题是耦合。 RPC客户端以多种方式与服务实现紧密耦合,并且很难在不中断客户端的情况下更改服务实现:

  • 客户需要知道程序名称;
  • 程序参数的顺序,类型和数量的事项。 在服务器端更改过程签名(参数数量,参数顺序,参数类型等等)并不容易,而不会破坏客户端实现;
  • RPC样式不会公开除过程端点+过程参数外的任何内容。 客户不可能确定接下来可以做什么。
  • 另一方面,在REST风格中,通过在表示中包含控制信息(HTTP头+表示形式)来引导客户端非常容易。 例如:

  • 有可能(并且实际上是强制性的)嵌入链接注释的链接关系类型,这些链接关系类型表达了这些URI的含义;
  • 客户端实现不需要依赖于特定的过程名称和参数。 相反,客户端依赖于消息格式。 这为使用已经实现的特定媒体格式库(例如Atom,HTML,Collection + JSON,HAL等)创造了可能性。
  • 只要它们只依赖注册(或特定领域)的链接关系,就可以在不中断客户的情况下轻松更改URI;
  • 在表示中嵌入类似表单的结构是可能的,如果最终用户是人类的话,客户可以将这些描述作为UI功能公开;
  • 支持缓存是额外的优势;
  • 标准化状态代码;
  • REST方面有更多的差异和优势。


    我已经详细探讨了这个问题,并决定纯REST的方式太局限了,RPC是最好的,即使我的大多数应用程序都是CRUD应用程序。 如果你坚持使用REST,你最终会困扰你的脑袋,想知道如何为你的特殊目的轻松地将另一种需要的方法添加到你的API中。 在很多情况下,使用REST的唯一方法是为其创建另一个控制器,这可能会使程序过度复杂化。

    如果你决定使用RPC,唯一的区别就是你明确地将动词指定为URI的一部分,这是清晰的,一致的,更少的错误,并且确实没有问题。 特别是如果您创建的应用超出了简单的CRUD范围,则RPC是唯一可行的方法。 我对RESTful纯粹主义者有另一个问题:HTTP POST,GET,PUT,DELETE在HTTP中已经被REST颠覆为意义上的明确含义,仅仅因为它们适合大部分时间 - 但并非全部时间。

    在编程方面,我很久以前就发现试图用一件事来表示两件事情会在某个时候出现并咬你。 我喜欢使用POST来处理所有操作,因为它提供了根据您的方法需要发送和接收数据的自由。 你不能将整个世界融入CRUD。


    首先,HTTP-REST是“代表性状态转移”体系结构。 这意味着很多有趣的事情:

  • 您的API将是无状态的,因此设计起来要容易得多(在复杂的自动机中很容易忘记转换),并与独立的软件部分集成。
  • 您将被设计为安全的读取方法,这将很容易缓存和整合。
  • 你将被引导为设计写作方法作为幂等的方法,这将超时更好地处理。
  • 其次,HTTP-REST完全符合HTTP(请参阅上一部分中的“安全”和“幂等”),因此您将能够重复使用HTTP库(现有的每种现有语言)和HTTP反向代理,这将为您提供使用零代码行来实现高级功能(缓存,认证,压缩,重定向,重写,日志记录等)。

    最后但并非最不重要的一点,根据HTTP 1.1的设计者(以及REST的发明人),使用HTTP作为RPC协议是一个巨大的错误:http://www.ics.uci.edu/~fielding/pubs/dissertation/evaluation。 HTM#sec_6_5_2

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

    上一篇: REST vs JSON

    下一篇: REST API Best practice: How to accept list of parameter values as input