显然, REST is just a set of conventions about how to use HTTP 。我想知道这些约定提供了哪些优势。有人知道吗?
最佳答案
我不认为你会得到一个好的答案,部分原因是没有人真正同意 REST 是什么。 wikipedia page 重在流行语,轻在解释。讨论页面值得浏览一下,看看有多少人对此持不同意见。然而,据我所知,REST 意味着:
而不是随机命名的setter和getter网址,并使用所有的制定者GET
所有getter和POST
的,我们希望拥有的URL标识资源,然后使用HTTP Action GET
,POST
,PUT
和DELETE
做的东西给他们.所以代替
GET /get_article?id=1
POST /delete_article id=1
你会做
GET /articles/1/
DELETE /articles/1/
然后
POST
和 PUT
对应于“创建”和“更新”操作(但没有人同意哪个方向)。我认为缓存参数是错误的,因为查询字符串通常被缓存,除此之外你并不真正需要使用它们。例如 django 使这样的事情变得非常容易,我不会说它是 REST:
GET /get_article/1/
POST /delete_article/ id=1
或者甚至只是在 URL 中包含动词:
GET /read/article/1/
POST /delete/article/1/
POST /update/article/1/
POST /create/article/
在这种情况下,
GET
意味着没有副作用,而 POST
意味着改变服务器上的数据。我认为这可能更清晰更容易,尤其是因为您可以避免整个 PUT
-vs- POST
的事情。此外,如果您愿意,您可以添加更多动词,这样您就不会人为地绑定(bind)到 HTTP 提供的内容。例如:POST /hide/article/1/
POST /show/article/1/
(或者其他什么,在它们发生之前很难想到例子!)
所以总而言之,我只能看到两个优点:
synchronize("/articles/1/")
或其他什么。这在很大程度上取决于您的代码。 但是我认为有一些相当大的缺点:
PUT
和 POST
是哪个方向。在英语中,它们的意思相似(“我要在墙上贴/张贴通知。”)。 所以总而言之,我会说:除非你真的想要付出额外的努力,或者如果你的服务很好地映射到 CRUD 操作,为你的 API 的第二个版本保存 REST。
我刚刚遇到了 REST 的另一个问题:在一个请求中做多件事或指定要获取复合对象的哪些部分并不容易。这在往返时间可能很长且连接不可靠的移动设备上尤其重要。例如,假设您在 facebook 时间轴上收到帖子。 “纯” REST 方式类似于
GET /timeline_posts // Returns a list of post IDs.
GET /timeline_posts/1/ // Returns a list of message IDs in the post.
GET /timeline_posts/2/
GET /timeline_posts/3/
GET /message/10/
GET /message/11/
....
这有点荒谬。 Facebook 的 API 是非常棒的 IMO,让我们看看他们做了什么:
我不知道你会如何用 REST 做这样的事情,如果你做了,它是否仍然算作 REST。我当然会忽略任何试图告诉你你不应该这样做的人(特别是如果原因是“因为它不是 REST”)!
关于rest - 使用 REST 而不是非 REST HTTP 的优势是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2191049/