【问题标题】:Should I RESTify my RPC calls over HTTP?我应该通过 HTTP 对我的 RPC 调用进行 RESTify 吗?
【发布时间】:2010-10-25 07:55:18
【问题描述】:

我们有 RPC 的 HTTP 网络服务。它们返回表示检索或创建的对象的 XML。我想知道“重新调整”服务的优势(如果有的话)。

我看到的一件事是我们不需要每个资源的表示,我们也不需要支持所有资源上的所有操作(GET、PUT、POST、DELETE)。 基本上我的问题是这个。

说服我应该使用 RESTful 服务而不是 RPC over HTTP,这些 RESTful 服务应该是什么?

【问题讨论】:

  • 我认为 REST 和任何使用 HTTP 的 RPC 之间不会有太大区别。如果您的服务类似地使用 GET 和 POST,您可能可以根据 REST 记录 Web 服务。这取决于您为 RPC over HTTP 使用的库。所有请求都是 POST 吗?

标签: web-services rest httpwebrequest rpc


【解决方案1】:

首先,它与语义有关,URI 是一个统一的 Resource 指示符。 HTTP 提供了 GET、POST、PUT 和 DELETE 资源的方法。 HTTP 标头指定我想要接收或发送信息的格式。这一切都可以通过 HTTP 协议轻松获得。

因此,您可以重用用于 HTML 输出的相同 URL,以使用 HTTP 的方式获取 XML、JSON。

XML-RPCSOAP 基于调用由 XSD 或 WSDL 文件描述的方法,而 REST 基于获取/修改资源。差异是微妙但明显的。 URL 仅描述资源,而不是像 SOAP 和 XML-RPC 那样经常描述的操作。

REST 的好处是,您可以利用 HTTP 动词来修改资源,如应该命名为 create/new/add 等的方法调用。有意义的 HTTP 状态代码而不是不同类型的错误响应,并且能够以标准方式在同一资源上指定不同的格式。

您也不必接受 RESTful 资源上的所有动词,例如,如果您想要只读资源,只需在任何不是 GET 的动词上返回 405 状态代码 Method Not Allowed

您应该重做对 REST 的 RPC 调用吗?不,我不这么认为。好处不超过开发时间。设置新的 Web 服务时应该学习 REST 吗?是的,我个人确实这么认为,使用 REST 资源会感觉更自然,并且可以更快地增长。

编辑

我觉得 REST 胜过 XML-RPC/SOAP 的原因是,在开发网站时,您已经将所有必要的数据汇总为 HTML 输出,您还需要为 POST 主体编写验证代码。为什么仅仅因为传输标记发生变化就应该更改为不同的协议?

这样,当您设计一个新网站(与语言无关)时,如果您真的将 URI 视为资源,那么您基本上将 URI 用作方法调用,并在方法调用前加上 HTTP 动词。

也就是说,/products/12 上带有 HTTP 标头 Accept: application/json; 的 GET 基本上(想象的)转换为 getProducts(12,MimeType.Json)

这个“方法”必须做几件事

  1. 检查我们是否支持将 JSON 作为 MIME 类型。 (验证请求)
  2. 验证请求数据
  3. 产品 12 的汇总数据。
  4. 格式化为 JSON 并返回。

如果由于某种原因在未来 4 年内 YAML 将成为下一个大热潮,并且您的一位消费者希望以这种方式与您交谈,则插入这种 MIME 类型比使用常规 Web 服务更容易.

现在产品 12 是您很可能还希望接受 HTML MIME 类型以显示所述产品的资源,但是对于像 /product/12/reviews/14/ 这样的 URI,您不需要 HTML 对应项,您只希望您的消费者能够发布到该 URL 以更新(PUT)/删除(DELETE)他们自己的评论。

将 URI 严格地视为资源,而不仅仅是网页的位置,而这些资源又与服务器端对方法调用的 HTTP 请求相结合,从而产生干净(SEO 友好)的 URL 和(更重要的是? ) 易于开发。

我确信任何语言的框架都会自动为您执行 URI 到方法调用的映射。我不能推荐一个,因为我通常会推出自己的。

ASP.NET MVC 也按照相同的原理工作,但在我看来,它不会产生 RESTful URI。默认情况下,ASP.NET MVC 将动词作为 URI 的一部分,但请注意,ASP.NET MVC 绝不会强迫您这样做(或其他任何事情)。

如果您至少要选择一个框架,他们应该:

  1. 将 URI 绑定到服务器上的方法
  2. 支持对象到 JSON/XML 等的序列化。如果您必须自己编写,这会很痛苦,但取决于语言,并不是太难。
  3. 公开某种类型安全的请求助手,以帮助您确定请求的内容,而无需手动解析 HTTP 标头。

【讨论】:

  • 这很好。您能否就为什么 REST 比 XML-RPC 更适合新的 Web 服务发表更多评论?
  • 当然。我觉得我有点咆哮,但我希望它能更好地解释我的立场。
  • 我看到您是一名 JSP 开发人员,我从 Jersy jersey.dev.java.net 那里听到了很多人用 JSP 实现 REST 的好故事。它还支持 JAXB 将 XML/JSON 请求自动绑定到对象。
【解决方案2】:

【讨论】:

  • URI构造与REST无关
【解决方案3】:

查询字符串不应用于以分层、非查询方式访问资源。缓存时查询字符串通常会被忽略,这样既危险又慢。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-27
    • 2016-11-12
    • 2011-01-01
    • 2017-12-02
    • 1970-01-01
    • 2016-11-26
    相关资源
    最近更新 更多