什么是 REST? 有点困惑

我假设 REST 是一个 Web 服务,但似乎我的想法是不正确的-那么,什么是 REST?

我已经通读了维基百科,但仍然不能完全理解它。为什么很多地方把 API 称为 REST API?

109511 次浏览

Http://en.wikipedia.org/wiki/representational_state_transfer

基本思想是,你不需要与服务器保持连接,而是发出一个请求,获取一些数据,向用户显示这些数据,但可能不是全部,然后当用户做一些需要更多数据的事情,或者向服务器传递一些数据时,客户端发起一个改变到一个新的状态。

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

首先阅读 Ryan Tomayko 的文章 我是如何向我的妻子解释 REST 的,这是一个很好的起点。然后读 Fielding 的论文。它不是那么先进,也不是很长(六章,180页) !(我知道你们学校的孩子喜欢短发)。

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

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

考虑 REST 的最基本方法是将其作为一种格式化 Web 应用程序 URL 的方法。例如,如果您的资源被称为“ post”,那么:

/posts将是用户访问所有帖子的方式,用于显示。

/posts/:id将是用户如何访问和查看根据其唯一 ID 检索的单个帖子。

/posts/new将是如何显示用于创建新帖子的表单。

发送一个 POST 请求到 /users将是您实际上如何 创造一个新的数据库级别的职位。

/users/:id发送 PUT 请求将是更新给定文章的属性的方式,同样由唯一的 id 标识。

/users/:id发送一个 DELETE 请求将是您删除给定文章的方式,同样由唯一的 id 标识。

据我所知,REST 模式主要是由 Ruby on Rails 框架推广的(针对 web 应用程序) ,该框架非常重视 RESTful 路由。不过我可能错了。

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

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

它代表 REST,意味着很多东西,但通常当你谈论 API 和应用程序时,你谈论的是 REST 作为一种方式来做 web 服务或让程序在 web 上交谈。

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

简而言之,REST 允许两个应用程序使用类似于 Web 浏览器使用的工具在互联网上交谈。这比 SOAP 简单得多,REST 所做的很多事情都是这样说的: “嘿,事情不一定要这么复杂。”

值得一读:

REST是用于基于网络的软件体系结构的 建筑风格设计

REST概念称为资源。资源的表示形式必须是无状态的。它通过某种媒体类型表示。媒体类型的一些示例包括 XMLJSONRDF。资源由组件操纵。组件通过标准的统一接口请求和操作资源。对于 HTTP,这个接口由标准的 HTTP 操作组成,例如 GETPUTPOSTDELETE

REST通常在 HTTP上使用,这主要是由于 HTTP 的简单性及其非常自然地映射到 RESTful 原则。然而,REST 并不绑定到任何特定的协议。

基本休息原则

客户端-服务器通信

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

无国籍

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

缓存

可以使用缓存约束,因此可以将响应数据标记为可缓存或不可缓存。任何标记为可缓存的数据都可以作为对相同后续请求的响应重用。

统一界面

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

上述概念代表了 REST 的定义特征,并将 REST 体系结构与 Web 服务等其他体系结构区分开来。需要注意的是,REST 服务是 Web 服务,但 Web 服务不一定是 REST 服务。

关于 休息和上述原则的更多细节,请参阅 REST 设计原则上的 邮寄博客。