REST 调用和 URL 之间的区别
Posted
技术标签:
【中文标题】REST 调用和 URL 之间的区别【英文标题】:Difference between REST call and URL 【发布时间】:2014-07-23 19:02:58 【问题描述】:我从某个时候开始从事网络开发。但是最近遇到了一个老技术,REST
。我阅读了很多关于REST
调用的地方,我对REST
服务的理解是,
REST
服务返回 JSON
或 XML
数据,可用于客户端渲染 DOM 元素。
增强了HTTP
协议的使用。
REST
调用和普通URL
之间的 URL 区别是:
REST 调用:wwww.xyz.com/getCart/12
网址:wwww.xyz.com/getCart.php?cartId=12
我得到了基本的区别,点击 URL 将在服务器端呈现页面并返回响应,而对 REST
服务进行 AJAX 调用只会返回 JSON
或 XML
输出可以在客户端解析。
我的问题是:
如果我让我的.php
页面呈现JSON
字符串,并且应用程序对php
页面进行AJAX
调用以获取JSON
响应并在客户端使用它来呈现DOM,那么REST
调用和普通的URL
调用有什么区别?
REST
调用的配置与普通URLs
有何不同?
【问题讨论】:
【参考方案1】:所有 Web 服务都是 API,但并非所有 API 都是 Web 服务。
API 是应用程序接口,意味着一个应用程序能够以标准化方式与另一个应用程序交互。
Web 服务是一种 API,必须通过网络连接访问。
REST API 是使用 HTTP 方法构建 Web API 的标准化架构。
【讨论】:
【参考方案2】:REST 只是一种架构风格,没有技术上的区别。
REST 定义的其中一件事是,您的 URL 必须是仅引用一个资源的原子标识符。
GET /users/:id (返回给定 :id 的用户)
PUT /users/:id(使用给定的 :id 更新用户)
Here 是关于使用框架在 php 中制作 REST API 的答案。
【讨论】:
虽然我同意技术上没有区别,但我不同意 REST 定义了关于 URL 语义的任何内容,而不是仅引用一个资源的原子标识符。总体而言,拥有经过深思熟虑的 URL 是一种很好的设计实践,但它与 REST 没有直接关系。通常,当人们认为 URL 语义对 REST 很重要时,他们并没有使用 HATEOAS,这意味着他们根本没有使用 REST。 你说得对,这就是我想说的“需要有代表性”,但英语不是我的母语:/。谢谢指正。【参考方案3】:关于 REST 存在很多错误信息和混淆。这三点是您从现有信息中理解的,我并不感到惊讶,但它们是错误的。
REST 不与任何特定的数据格式或媒体类型耦合。 REST 中最重要的约束是强调统一接口,这意味着在这种情况下,服务器应该能够以客户端接受的任何数据格式或媒体类型进行响应。在 HTTP 下,客户端将通过 Accept
标头告诉它可以理解哪些格式,服务器应该遵守或失败并出现 406 Not Acceptable
错误。
同样,REST 不与任何特定协议耦合,尽管它经常与 HTTP 复杂化。同样,遵循统一接口,客户端应该能够遵循服务器提供的任何链接,适用于具有有效 URI 方案的任何协议。
URL 的语义与 REST 完全无关。对 REST 而言,重要的是 URL 标识一个且只有一个资源。 URL 是一个原子标识符,客户端不应依赖其中嵌入的任何语义进行任何操作。您提供的两个示例在 REST 中均有效。它们中的任何一个都或多或少是 RESTful。
要回答您的问题,在 REST 应用程序下,您想象的差异并不存在。点击 URL 将返回响应。如果客户端使用Accept: text/html
标头进行请求,它可能会返回要由浏览器呈现的人性化html 页面。如果客户端使用Accept: application/json
或Accept: application/xml
请求,它可能会返回机器友好的格式以供其他应用程序读取。
【讨论】:
我有点明白你的意思。我想这是正确的.. 但是为 REST 和 URL 配置应用程序有什么区别吗? 没有区别。这是同一件事。每个有效的 URL 在 REST 中也是有效的,只要它只引用一个资源。 我的意思是,REST 的文件结构和普通 URL 之间有什么区别.. 我们如何接收 REST 调用。我确信我们没有与 URL 相同的文件夹结构。 没有 REST URL 和普通 URL 这样的东西。从 REST 的角度来看,URL 的内容是无关紧要的。你会看到一个没有区别的地方。 HTTP API 中的 URL 采用了约定,我认为这就是您所说的“文件夹结构”。从这个意义上说,你可以说 /carts/12 比 /getCart?id=12 更像 REST,但这是非常主观的。人们在无休止的争论中浪费了很多时间,但这并不重要。对于 REST,重要的是您的客户端如何获取 URL。【参考方案4】:Rest 更加强调动词,例如GET
、PUT
、POST
... 您可以调用一种方法,例如
/api/Customers
根据您使用的动词,它会执行 get、post、put 或 delete。您还可以制作更简单的 URL 像
/api/Customers/id/Orders/id
而不是制作一个方法
api/GetCustomersOrders?id=x&id=y.
【讨论】:
我知道这部分。但是您可以轻松处理这部分。它是否对应用程序的配置进行了任何更改?据我所知,Java 在部署 WAR 文件时会处理这部分内容,但是您将如何在 php 文件中进行相同的配置? 我并不是真正的 PHP 程序员,但这可能会有所帮助。 code.tutsplus.com/tutorials/…以上是关于REST 调用和 URL 之间的区别的主要内容,如果未能解决你的问题,请参考以下文章
java 要调用别人提供的rest api接口接口是url 比如实现简单的增加操作 具体实现哪些步骤?