10

像 Java 的 jax-rs 一样的完整 REST api 包含用于定义资源路径的定义,使用完整的 GET、POST、PUT 请求。

但通常当我遇到 REST API 时,它通常是标准的 HTTP GET 请求,响应是 JSON 输出。看起来真实世界 REST 请求的核心是使用 JSON 输出,但 REST 的真正定义允许 XML、JSON 或其他输出类型。

例如,twitter API 有“JSON”输出,它们使用 GET 请求,下面是一些 URL:

https://dev.twitter.com/docs/api/1.1/get/search/tweets

而且您仍然可以使用“GET”参数来修改请求。似乎 twitter 'search/tweets' 函数只是一个简单的 http 请求,具有定义良好的 URI 路径,恰好返回 JSON 响应。这真的是 REST 吗?

什么是 REST api?

在 Jax-rs http://en.wikipedia.org/wiki/Java_API_for_RESTful_Web_Services

(对不起,如果这有点主观或轶事,但我相信开发人员对此感到疑惑)

4

5 回答 5

6

REST(Representational State Transfer)是一种模糊的架构设计模式,最初由 Roy Fieldings(又名 HTTP 的创建者)在一篇论文中提出。

大多数情况下(99% 的时间),当有人想要一个 REST API 时,他们意味着他们想要一个 Web API,他们在其中发送一个包含 HTTP 动词和一个 URL 的请求,该 URL 描述了将由HTTP 动词。然后,Web 服务器在资源上执行请求的动词并将响应发送回用户。响应通常(取决于使用的 HTTP 动词)包含结果Resource的表示。资源可以表示为 HTML、JSON、XML 或许多其他不同的mime 类型

响应中使用的哪种表示并不能真正表明 API 是否为 RESTful;它是接口的 URL 的结构以及 Web 服务器的行为是如何使用 HTTP 动词定义的。正确兼容的 REST API 应该使用 GET 动词来仅读取资源,使用 POST 动词来修改资源,使用 PUT 来添加/替换资源,以及使用 DELETE 来删除资源。HTTP 规范中列出了预期动词行为的更正式定义。

于 2013-02-26T06:18:23.160 回答
5

REST(简而言之)是一种范式,资源应该可以通过 URI 访问,并且可以使用类似 HTTP 的动词来操作它们(也就是说,HTTP 的设计考虑了 REST 原则)。例如,这与为您的应用程序拥有一个 URI 并发布数据负载以告诉服务器您想要实现的目标相反。

粗略地打个比方,文件系统通常是 RESTful 的。不同的资源位于易于访问和写入的不同地址(目录),尽管不一定以反映路径的方式存储在磁盘上。或者,大多数数据库都不是RESTful - 您连接到数据库并通过声明性 API 访问数据,而不是按位置查找数据。

至于资源是什么——HTML、JSON、滑水松鼠的视频——这是与遵循 RESTful 原则不同的抽象级别。

于 2013-02-26T04:48:11.883 回答
0

REST 是一个相当“松散”的标准,但 JSON 是一种合理的标准化格式。总体而言,我对 JSON 的唯一主要担忧是它没有像 XML 那样显式定义其字符编码的方法。至于动词,坚持动词的有意义用法很好,但它们不一定在每种情况下都一一对应,所以像往常一样,使用常识:)

于 2013-02-26T04:46:35.633 回答
0

它可以是 JSON,也可以是 XML。JSON 并不完全是行业“标准”,但许多开发人员(包括我)都喜欢它,因为它轻量级且易于使用。

于 2013-02-26T04:47:21.990 回答
0

差不多就是这样。REST 设计得很简单。它的要点是每个 url 对应一个唯一的资源。资源的格式通常是 json,但可以是任何格式,通常由 url 的“扩展名”或“格式”部分确定。例如,“/posts/1.json”和“/posts/1.xml”只是同一逻辑资源的两种不同表示形式,分别以 json 和 xml 格式表示。RESTful 接口的另一个常见特征是使用 HTTP 动词(例如 GET、PUT 和 POST)来检索、修改和创建新资源。这就是它的全部内容。

于 2013-02-26T04:51:33.347 回答