【问题标题】:Is this REST protocol?这是 REST 协议吗?
【发布时间】:2012-03-17 11:10:52
【问题描述】:

我在我的 Android 应用程序中使用了这段代码:

import org.apache.http.client.methods.HttpPost;
...
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://myServerAddress");
httppost.setEntity(new UrlEncodedFormEntity(myArrayList));
HttpResponse response = httpclient.execute(httppost);

说这段代码使用 REST 协议是否正确?

--- 编辑---

(服务器端我使用了一个返回JSON对象的脚本)

【问题讨论】:

  • 该代码只是一个 HTTP POST 请求,没有任何内容表明它是 REST 还是其他。为什么要问?
  • Wikipedia 说“REST 是一种架构,不像 SOAP,它是一种协议”——所以“使用 REST 协议”有点不正确
  • @zapl REST 是一种架构风格,这使得它比架构更加抽象。

标签: android json apache http rest


【解决方案1】:

REST 是一种服务器端架构。无法从该客户端代码中确定服务器是否具有这样的 API 架构。 “也许吧。”

【讨论】:

    【解决方案2】:

    严格来说,REST 既不是协议也不是架构,而是一种架构“风格”(一种创建架构或架构的一部分的特定方式)。对于确认 REST 风格的架构来说,这是很常见的被称为 RESTful

    从实用角度讲,REST 使用 HTTP 协议,使用 HTTP POST(创建)、HTTP GET(读取)、HTTP PUT(更新)和 HTTP 来创建、读取、更新和删除(CRUD)可通过 URL 寻址的资源DELETE(删除)。

    从理论上讲,REST 表示 Representational State Transfer,其中“Representational”是指在 (HTTP) 请求中发送或接收的资源(get 或 post 请求或响应的内容)的表示,而事实上,通过执行请求,您正在将资源的“状态”从客户端“传输”到服务器,反之亦然。

    除了可通过 URL 唯一寻址的资源的主要标准和 CRUD 使用 HTTP 动词(POST、PUT...等)之外,REST 还有更多方面,例如状态转换应该理想情况下,仅通过资源中提供的链接发生,资源应根据链接关系类型进行链接,等等......但这很快就会变得有点宗教性:-)

    如果它具有可通过 URL 正确唯一寻址的资源并且如果它使用 POST、GET、PUT 和 DELETE 进行 CRUD,我会很想调用 Archticture RESTful...

    希望对您有所帮助...

    【讨论】:

      【解决方案3】:

      您的代码显示您使用 HTTP 协议而不是使用 REST。 REST 是一种设计方法,而不是一种协议。

      这意味着您向 REST 服务器发出 POST。因为它是 POST,所以您发布的值应该在请求正文中。所以第一个问题:您的 REST 服务器用于交换数据的 Witch 格式? JSON,XML?其他格式?

      我假设它是 JSON。第二个问题:您的 httpclient 是否能够发送 JSON 内容?

      REST POST 的一个经典示例是 在请求正文中使用 JSON 在“http://myServerAddress/car”上发布 {"brand":"ford","model":"mustang"}

      您可以使用 RESTClient 等 firefox 插件来手动尝试在您的服务器上执行 POST 请求。完成你的android代码后会更容易。

      【讨论】:

        【解决方案4】:

        使用 REST 实现 Web 服务 API 意味着您通过 URL 访问它们,就像“您正在获取网页”一样。这意味着与这种 WS 交互非常容易,因为您不必处理 SOAP 的复杂性,其中您必须在服务器端声明 WSDL 等等......

        总之,您有一些代码实际上对某个 URL 进行了一些 POST。这将取决于此 URL 访问的实际作用。这是从 WS 返回 XML 或 JSON 的一种非常常见的方法,因此在这种情况下,您几乎可以确定您正在访问一个安静的 WS。

        希望这会有所帮助!

        【讨论】:

        • 非常感谢!!此代码与 PHP 脚本通信......并且该脚本返回一个 JSON 对象。因此我使用其余协议
        • 尽管这是描述 REST 的常用方式,但它更像是基于 HTTP 的 CRUD。 RESTful 包括使用通过超链接驱动交互的超媒体类型(又名 HATEOAS =“作为应用程序状态引擎的超媒体”)
        • 没错,访问 URL 不是 REST 的。所以我认为这个答案是不正确的。
        • mmm .. 我很困惑.. 维基百科说:符合 REST 约束通常被称为“RESTful”...所以我的代码是 RESTful 的?
        • 就像单个分子不能忽冷忽热一样,安静与否不是代码的质量,而是架构的质量。
        猜你喜欢
        • 1970-01-01
        • 2011-03-19
        • 1970-01-01
        • 1970-01-01
        • 2015-02-01
        • 2012-07-31
        • 2019-03-23
        • 1970-01-01
        • 2019-01-07
        相关资源
        最近更新 更多