【问题标题】:What is REST? Slightly confused [closed]什么是 REST?有点困惑[关闭]
【发布时间】:2011-06-07 12:40:36
【问题描述】:

我假设 REST 是一种 Web 服务,但我的想法似乎是错误的 - 那么,什么是 REST?

我已经阅读了维基百科,但仍然无法完全理解它。为什么很多地方都将 API 称为 REST API?

【问题讨论】:

  • @John Saunders:这怎么可能是重复的?另一个人显然知道 REST 是什么,而另一方面,Nathan 很困惑。
  • 我觉得对方会回答他的问题。如果没有其他人同意,那么接近投票将失效。对于这个问题,我们有大约十个答案。只需点击“rest”标签,您就会看到所有内容。
  • REST 是一组用于构建 Web 服务的规则。如果 API 是根据这些规则构建的,那么它就是 REST API。 How I explained REST to my rubber duck 非正式地解释了其中一些规则。

标签: rest


【解决方案1】:

REST 不是特定的 Web 服务,而是用于管理状态信息的设计概念(架构)。这方面的开创性论文是 Roy Thomas Fielding 的论文(2000 年),“架构风格和基于网络的软件架构的设计”(available online 来自加州大学欧文分校)。

首先阅读 Ryan Tomayko 的帖子How I explained REST to my wife;这是一个很好的起点。然后阅读菲尔丁的实际论文。没那么高级,也不长(六章,180页)! (我知道你们学校的孩子喜欢短篇)。

编辑:我觉得试图解释 REST 毫无意义。它有很多概念,如可扩展性、可见性(无状态)等,读者需要掌握,理解这些的最佳来源是实际的论文。它不仅仅是 POST/GET 等。

【讨论】:

【解决方案2】:

REST 是一种软件设计模式,通常用于 Web 应用程序。通俗地说,这意味着它是许多不同项目中常用的想法。它代表代表性状态转移。 REST 的基本思想是将服务器端的对象(如数据库表中的行)视为可以创建或销毁的资源。

考虑 REST 的最基本方式是格式化 Web 应用程序的 URL。例如,如果您的资源被称为“帖子”,那么:

/posts 将是用户访问所有帖子以进行显示的方式。

/posts/:id 将是用户访问和查看基于其唯一 ID 检索的单个帖子的方式。

/posts/new 将是您显示用于创建新帖子的表单的方式。

/users 发送 POST 请求将是您实际创建数据库级别的新帖子的方式。

/users/:id 发送 PUT 请求将是您更新给定帖子属性的方式,再次由唯一 ID 标识。

/users/:id 发送删除请求将是您删除给定帖子的方式,该帖子再次由唯一 ID 标识。

据我了解,REST 模式主要是由 Ruby on Rails 框架推广(用于 Web 应用程序),它非常强调 RESTful 路由。不过我可能错了。

我可能不是最有资格谈论它,但这就是我学习它的方式(特别是对于 Rails 开发)。

当有人提到“REST api”时,通常他们的意思是使用 RESTful url 来检索数据的 api。

【讨论】:

  • 你很幸运,因为 Rails 是基于 REST 原则构建的,如果你使用 Rails 工具,你的代码将是 RESTful。然而,有些程序员不了解杰克关于 REST 的知识,他们编写自己想要的代码,最后他们利用这种“URL 格式”,因为它很流行。
  • 在这个答案中曾经使用过 /users,不应该是 /posts 吗?
  • @MayureshSrivastava 观察 PUT 示例有 :id 而 POST 示例没有 :id。谷歌的故事的其余部分。 (POST:不安全,非幂等;PUT:不安全,幂等)
【解决方案3】:

REST 是一种架构风格,也是一种设计,用于基于网络的软件架构。

REST 概念被称为资源。资源的表示必须是无状态的。它通过某种媒体类型表示。媒体类型的一些示例包括XMLJSONRDF。资源由组件操作。组件通过标准的统一接口请求和操作资源。在 HTTP 的情况下,此接口由标准 HTTP 操作组成,例如GETPUTPOSTDELETE

REST 通常用于HTTP,主要是由于 HTTP 的简单性及其与 RESTful 原则的非常自然的映射。然而 REST 并不依赖于任何特定的协议。

基本 REST 原则

客户端-服务器通信

客户端-服务器架构具有非常明显的关注点分离。所有以 RESTful 风格构建的应用程序原则上也必须是客户端-服务器。

无状态

对服务器的每个客户端请求都要求其状态得到完全表示。服务器必须能够在不使用任何服务器上下文或服务器会话状态的情况下完全理解客户端请求。因此,所有状态都必须保存在客户端上。稍后我们将更详细地讨论无状态表示。

可缓存

可以使用缓存约束,从而使响应数据能够被标记为可缓存或不可缓存。任何标记为可缓存的数据都可以作为对同一后续请求的响应重用。

统一接口

所有组件都必须通过一个统一的接口进行交互。因为所有的组件交互都是通过这个接口进行的,所以与不同服务的交互非常简单。界面是一样的!这也意味着可以单独进行实施更改。此类更改不会影响基本组件交互,因为统一接口始终不变。一个缺点是你被界面卡住了。如果可以通过更改接口为特定服务提供优化,那么您就不走运了,因为 REST 禁止这样做。然而,好的一面是,REST 针对 Web 进行了优化,因此 REST over HTTP 非常受欢迎!

上述概念代表了 REST 的定义特征,并将 REST 架构与其他架构(如 Web 服务)区分开来。请注意,REST 服务是 Web 服务,但 Web 服务不一定是 REST 服务。

有关 REST 和上述原则的更多详细信息,请参阅 REST Design Principals 上的此博客 post

【讨论】:

    【解决方案4】:

    它代表 Representational State Transfer,它可能意味着很多东西,但通常当您谈论 API 和应用程序时,您是在谈论 REST 作为一种提供 Web 服务或让程序通过 Web 进行通信的方式。

    REST 基本上是一种在系统之间进行通信的方式,并且完成了 SOAP RPC 的大部分设计工作,但是虽然 SOAP 通常会建立连接、进行身份验证,然后通过该连接执行操作,但 REST 的工作方式与网络工作。您有一个 URL,当您请求该 URL 时,您会得到一些回报。这就是事情开始变得混乱的地方,因为人们将网络描述为最大的 REST 应用程序,虽然这在技术上是正确的,但并不能真正帮助解释它是什么。

    简而言之,REST 允许您使用类似于 Web 浏览器使用的工具让两个应用程序通过 Internet 进行通信。这比 SOAP 简单得多,而且 REST 所做的很多事情都是说:“嘿,事情不必那么复杂。”

    值得一读:

    【讨论】:

    • REST 是一种基于约束的架构,SOAP 是一种协议,它们是完全不同的东西。我不喜欢人们在同一个概念中谈论 SOAP 和 REST,难怪人们会对此感到困惑。
    • @Anders - 他说他正在研究 REST API,并认为这是使用 Web 服务的一种方式。您可以像那样使用 REST,并且在这种能力下,它完成了 SOAP 完成的大部分工作。也可以将 Web 称为世界上最大的 RESTful 应用程序,但这并不能真正解释您将使用 REST API 来做什么。
    • 这实际上是我的主要问题,将 REST 和 SOAP 放在同一个概念中。似乎 API 在设计上只是 RESTful。
    【解决方案5】:

    http://en.wikipedia.org/wiki/Representational_State_Transfer

    基本思想是,您不是与服务器建立持续连接,而是发出请求,获取一些数据,向用户显示,但可能不是全部,然后当用户执行需要执行的操作时更多数据,或者为了将一些数据传递给服务器,客户端启动一个新状态的更改。

    【讨论】:

    • 也许只有我一个人,但我喜欢在 stackoverflow 上看到相关答案以及适当的引用。只是幽默我,假设维基百科去噗。那么你的链接有什么好处呢? :)
    • @Hack Saw:你的答案不应该是这样吗?
    • 我刚刚注意到了编辑功能。 :)
    • @karatedog:REST 可以通过 HTTP 实现,但也可以通过多种数据传输方式实现。
    • 这是你写的 HTTP 协议,REST 是一种架构。
    猜你喜欢
    • 2015-12-07
    • 1970-01-01
    • 1970-01-01
    • 2021-07-29
    • 2020-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-31
    相关资源
    最近更新 更多