【问题标题】:2 questions about RESTful Web Services关于 RESTful Web 服务的 2 个问题
【发布时间】:2012-01-29 10:35:51
【问题描述】:

我是 RESTful Web 服务的新手。我有以下 2 个问题:

  1. GET、POST、DELETE、PUT、TRACE、HEAD、OPTIONS 是 Http 中唯一可以用于 RESTful Web 服务的动词吗?

  2. 如何创建和使用自定义动词?

我正在使用 Java 和 Jersey 来创建我的 RESTful Web 服务。

【问题讨论】:

  • 除了 GET、POST、PUT 和 DELETE 之外,您还需要什么动词?请解释一下。
  • 通过创建自定义动词超出 HTTP 规范将使您的服务不符合 HTTP 标准,这可能会导致未来出现不可预见的问题(例如互操作性)。此外,大多数开发人员永远不会超越 GET 和 POST,因此了解您为什么认为需要新东西会很有趣
  • 老实说,我是 Web 服务的新手。所以,我可能对它有很多误解。但是假设我想提供 10 种不同的操作。那么我如何提供只有 7 个动词的 10 个动作呢?不是每个动作都在一个单独的动词下吗?或者我错了,可以使用条件在单个动词下提供多个动作?一般来说,其他人如何设计他们的应用程序,即使他们需要提供 100 种不同的动作,他们也不需要额外的动词?
  • 查看我的回答,您不想使用 HTTP 请求方法(GET、POST、ETC)来定义应用程序中的“动词”。将这些视为较低级别的内容,例如发送和接收。
  • §5.1.1:您可以在不超出 HTTP 规范的情况下定义自己的 HTTP 方法,因此它在技术上仍然符合 HTTP 标准。尽管您的互操作性 cmets 仍然适用。

标签: java rest service web


【解决方案1】:

问题 1 的答案是肯定的,因为它们受到 HTTP 规范的限制。然而,实际上,大多数 REST 应用程序仅使用 GET 和 POST,因为所有 Internet 基础设施都支持这些应用程序。然后问题二的答案是否定的,你不能创建自定义动词。

在使用 HTTP 动词时必须考虑的是 GET 应该没有副作用,因为客户端可以随时重新发送 GET(如果检测到通信失败)。然而,客户端最多只能发送一次 POST,因此这应该用于任何导致无法重复的更改(如插入)。

通常你会在你的应用程序中定义你想要的“动词”作为 URL 的一部分,而不是作为 HTTP 动词。

【讨论】:

  • 谢谢弗朗西斯。这是有道理的。
  • 如果你喜欢请accept :)
  • 我想你没有理由“添加”一个动词。至少,由于这些框架是围绕标准 HTTP 动词构建的,因此您的客户使用许多框架进行 Web 服务调用会变得很困难。如果您有时间并且想真正了解 HTTP 可以为您做什么,我强烈建议您阅读 Jim Webber、Savas Parastatidis 和 Ian Robinson 的“REST 实践:超媒体和系统架构”。直到读完这本书,我才真正了解 HTTP。
【解决方案2】:

那我如何提供只有 7 个动词的 10 个动作呢?

Web 服务背后的理念是关注对象,而不是动词。

您的操作是“创建”(“POST”)、“检索”(“GET”)、“更新”(“PUT”)或“删除”(“DELETE”)对象 .

不是每个动作都在一个单独的动词下吗?

没有。你可以拥有所有你想要的对象。您只需要四个动词即可创建、查找、更改和删除对象。

或者我错了,可以使用条件在单个动词下提供多个动作?

没有。您可以发出创建(“POST”)请求,该请求又可以创建多个单独的对象。

一般来说,其他人如何设计他们的应用程序,即使他们需要提供 100 种不同的动作,他们也不需要额外的动词?

您专注于对象。创建、检索、更新和删除对象。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-30
    • 2012-03-13
    • 2016-10-30
    • 2016-12-31
    • 2023-03-09
    • 1970-01-01
    • 2021-05-11
    • 1970-01-01
    相关资源
    最近更新 更多