RESTful 在过去风靡了有一阵子,然而在实践中它并不是那么好用,在现今微服务横行的时期更是如此。
REST 由 HTTP 承载,REST 建议我们尽可能的使用 HTTP 的状态码表示业务返回码,这从一开始就是有问题的,HTTP 状态码屈指可数,根本无法囊括复杂的业务返回值。而且很多时候是有歧义的,比如 404 到底表示这个 url 不存在还是我要请求的业务数据不存在?协议层的错误码和应用层的错误码,本就不该混用。
在微服务时代,我们往往还要求两个服务之间是能够双向通信的,而 REST 却是单向的 --- 只能由客户端请求服务端,要实现双向通信,要么多建立一条服务端请求客户端的连接,要么客户端不断的轮询服务端。
再就是我们希望能够复用同一条连接来发送多个请求,HTTP 默认情况下每个请求创建一个新连接,请求完释放连接,开销比较大。虽然 HTTP 的 keep-alive 头能够实现这一点,但这个机制比较粗糙,而且服务端还未必支持。
(首发:编程笔记)