显然, REST is just a set of conventions about how to use HTTP 。我想知道这些约定提供了哪些优势。有人知道吗?

最佳答案

我不认为你会得到一个好的答案,部分原因是没有人真正同意 REST 是什么。 wikipedia page 重在流行语,轻在解释。讨论页面值得浏览一下,看看有多少人对此持不同意见。然而,据我所知,REST 意味着:

而不是随机命名的setter和getter网址,并使用所有的制定者GET所有getter和POST的,我们希望拥有的URL标识资源,然后使用HTTP Action GETPOSTPUTDELETE做的东西给他们.所以代替

GET /get_article?id=1
POST /delete_article   id=1

你会做
GET /articles/1/
DELETE /articles/1/

然后 POSTPUT 对应于“创建”和“更新”操作(但没有人同意哪个方向)。

我认为缓存参数是错误的,因为查询字符串通常被缓存,除此之外你并不真正需要使用它们。例如 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/

(或者其他什么,在它们发生之前很难想到例子!)

所以总而言之,我只能看到两个优点:
  • 您的 Web API 可能更清晰,更易于理解/发现。
  • 与网站同步数据时,使用 REST 可能更容易,因为您可以只说 synchronize("/articles/1/") 或其他什么。这在很大程度上取决于您的代码。

  • 但是我认为有一些相当大的缺点:
  • 并非所有操作都能轻松映射到 CRUD(创建、读取/检索、更新、删除)。您甚至可能不会处理对象类型资源。
  • 为可疑的利益付出额外的努力。
  • 混淆 PUTPOST 是哪个方向。在英语中,它们的意思相似(“我要在墙上贴/张贴通知。”)。

  • 所以总而言之,我会说:除非你真的想要付出额外的努力,或者如果你的服务很好地映射到 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/

    10-14 19:26
    查看更多