REST API真的是RESTful吗?

Den*_*res 3 api rest http-verbs http-method

我是这个游戏的新手,所以我可能会误解事物.实际上,如果有人告诉我,我误解了事情,那将是一种恩惠.也许这个人会体贴到足以向我展示正确的道路.但...

REST适用于Web服务(http://en.wikipedia.org/wiki/Representational_state_transfer#Applied_to_web_services)的" 指南 "或" 最佳实践 "之一是,您应该在拨打电话时使用正确的HTTP方法(我误解了它?)REST API的.

但是看看Web上的许多API实现,我看到100%的调用实际上是GET调用,根据它们的URI,它将被API解释为HTTP动词或方法之一.

因此,例如,查看Twitter(https://dev.twitter.com/rest/public)的REST API文档,其原则上只定义了两个动词/方法(GET和POST),实际上已发送所有调用作为GET,并且基于GET调用中的URI,由API解释并采取行动.

例:

GET状态/查找:https://api.twitter.com/1.1/statuses/lookup.json

POST状态/更新(PUT?):https://api.twitter.com/1.1/statuses/update.json

在这两种情况下,调用本身都是使用GET进行的,URI的最后一部分将其定义为真正的GET或POST.

总之,要成为真正的REST,不应该为Web服务的REST API的客户端实现使用正确的HTTP谓词/方法吗?

我错过了什么?

Ped*_*eck 10

你错过了很多,但不要担心,大多数人都是.

事实上,互联网上公开提供的所谓REST API很少是真正的REST,主要是因为它们不是超文本驱动的.REST成为了一个引用任何非SOAP的HTTP API的流行语,因此不要仅仅因为它说它是REST API而使API真正成为REST.我建议阅读这个答案.

根据我的经验,大多数API开发人员都不知道REST究竟是什么,并且相信任何使用HTTP并避免URI中的动词的HTTP API都是REST.

REST由一组约束定义.其中包括统一接口,简单来说意味着您不应该更改底层协议的预期行为.REST没有耦合到任何特定的协议,但由于它通常与HTTP一起使用,它们有时会变得复杂.

HTTP为GET,POST,PUT,DELETE,PATCH和HEAD方法定义了很好的语义,POST方法的语义由服务器决定.理想情况下,REST API应该完全按照RFC 7231中的规定响应POST以外的方法,但正如您所注意到的,有许多API称自己为REST但不这样做.出现这种情况有很多原因.有时会对正确的语义有一个简单的误解,或者是为了保持一致性,或者是因为与不支持所有方法的中介的向后兼容性以及许多其他原因.

因此,除了正确使用HTTP方法之外,还有很多工作要做真正的RESTful.如果API没有达到这个权利,它需要找到另一个流行语,因为它绝对不是REST.