【问题标题】:How is data sent in REST web servicesREST Web 服务中如何发送数据
【发布时间】:2015-04-25 18:16:38
【问题描述】:

我正在学习网络服务。我现在对 SOAP 有了很好的理解。我有几个关于 REST Web 服务的问题。

1) REST Web 服务中的 DO GET、PUT 和 POST 方法的工作方式与它们在简单网站上的工作方式完全相同。

2) REST Web 服务中的 GET 、 PUT 和 POST 方法允许我们在客户端和 Web 服务之间发送/接收数据(例如:Twitter 中的推文)。此消息是在 POST/PUT 方法的 Body 中以 XML/JSON/其他格式发送(PUT & POST) & Received(GET) 还是单独发送的文件(以特定格式)。

3) 是否有任何浏览器工具可用于查看 REST Web 服务中发送和接收的内容。

【问题讨论】:

  • 关于 #3,Postman 是一款非常棒的应用,可以在 Chrome 中做到这一点。

标签: api rest http


【解决方案1】:

首先,澄清一些事情。 REST 是一种架构风格,是一组约束来指导您的结构设计决策。 REST 不与任何特定的底层协议耦合,因此它不依赖于 HTTP,尽管它很常见。

其次,请记住,REST 已成为一个流行词,指代几乎所有非 SOAP 的 HTTP API,并且大多数所谓的 REST API 根本不是 REST。其中大多数是简单的 RPC over HTTP。我建议您阅读this answer 以获得一些澄清。

现在,回答您的问题:

1) REST Web 服务中的 DO GET、PUT 和 POST 方法与 与他们使用简单网站的方式相同。

您的问题的问题是,这些方法如何工作的唯一确切定义是 RFC 定义的定义,一个简单的网站可能会以不同的方式实现它。例如,PUT 不允许用于部分更新,但许多网站和 HTTP API 都会这样做。

正如我上面所说,REST 是独立于协议的,但是尊重统一接口约束和应用通用性原则,你应该尽可能地坚持底层协议的标准语义,这意味着如果你使用HTTP 1.1,您应该坚持 RFC 7230 到 7235 中确定的行为。

2) REST Web 服务中的 GET 、 PUT 和 POST 方法允许我们 在客户端和网络之间发送/接收数据(例如:Twitter 中的推文) 服务。此消息是否在正文中发送(PUT 和 POST)和接收(GET) XML/JSON/其他格式的 POST/PUT 方法或者是文件(在 具体格式)单独发送。

该格式是在客户端和服务器之间的先前合同中建立的(通常在文档中),并且在请求期间使用 Accept 和 Content-Type 标头进行处理。例如,如果客户端想要 JSON 响应,它会发送 Accept: application/json 标头。如果服务器无法使用 JSON 响应,它应该会以 406 Not Acceptable 失败。

请记住,在实际的 REST Web 服务中,您不会使用像 application/json 这样的通用媒体类型,因为除了如何解析内容之外,它完全没有说明内容。您应该为您的资源提供更具体的媒体类型,并将您的文档集中在这些上。例如,JSON 格式的用户资源可以具有自定义媒体类型,如 application/vnd.mycompany.user.v1+json。

3) 是否有任何浏览器工具可用于查看已发送和发送的内容? 在 REST Web 服务中接收

在谷歌浏览器中,您可以使用开发者工具,或者像this 或this 这样的客户端。你也可以使用像curl这样的命令行客户端。

另外,请记住,将通用 html+javascript 客户端放入真正的 REST API 以使其可通过浏览器导航应该很容易。以下是使用 HAL+JSON 和通用客户端的 REST API 示例。

https://api-sandbox.foxycart.com/hal-browser/browser.html#/

【讨论】:

    【解决方案2】:

    1) 是的,REST 功能与普通 HTTP 网站几乎完全相同,例如,GET 将在不更改服务器状态的情况下检索数据,而 POST 会将数据作为新的“对象”发送到 Web 服务,并且 PUT 会修改现有的“对象”

    2) 您将要发送的数据包含在 POST 请求的正文中,它会将数据返回正文中。 GET 不接受正文中的任何数据(您可以将其指定为路径/查询参数的一部分,即http://service.com/rest/directory/user1?param=something),但会在正文中返回查询结果。 POST 将要求以指定为已接受的格式之一发布消息,最常见的是 JSON。指定 Content-Type 将向 Web 服务器指示您发送的数据类型,Accept 标头将指示您希望响应的类型。

    3) 在 Google Chrome 中,您可以使用开发者工具(在 Windows 中为 Ctrl+Shift+I)并进入网络选项卡以查看在页面加载/执行任务时发送和接收的内容。您可以使用 DHC 或 RestEasy 通过 GUI 将您自己的自定义请求发送到 REST 服务,或使用 cURL 通过命令行执行此操作

    【讨论】:

      【解决方案3】:

      REST Web 服务中的 GET、PUT 和 POST 方法的工作方式与它们在简单网站上的工作方式完全相同吗?
      是的。它们在我们使用 http 的任何地方都是一样的。 请特别阅读 this article 请求方法部分

      REST Web 服务中的 GET 、 PUT 和 POST 方法允许我们在客户端和 Web 服务之间发送/接收数据(例如:Twitter 中的推文)。此消息是否以 XML/JSON/其他格式在 POST/PUT 方法的正文中发送(PUT 和 POST)和接收(GET)。
      是的,它们通常采用这些格式,但可以采用任何格式根据你的要求。 阅读this ans 以更好地理解内容类型和标题

      是否有任何浏览器工具可用于查看 REST Web 服务中发送和接收的内容。
      正如其中一个 cmets 所述。 Postman 是一个很棒的 chrome 扩展。我通常更喜欢提琴手而不是 Postman,但它不是浏览器工具。

      【讨论】:

      • 谢谢。 1和3清楚。对于 2,Post Request 是在正文部分发送的消息,对于 GET 方法,是在 BODY 部分收到的响应
      • 是的,消息在正文中发送(并在正文中收到响应)以进行 POST,而在 GET 中,消息在正文中收到
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-29
      相关资源
      最近更新 更多