【问题标题】:RESTful for non resource oriented webservicesRESTful 用于非面向资源的 Web 服务
【发布时间】:2013-01-04 21:27:51
【问题描述】:

我完全支持 REST Web 服务,我的公司制定了一项政策,优先选择 REST 而不是 SOAP。

但是,我需要公开一个不适合资源范式的 Web 服务。它本质上是一个计算,我需要发送大量参数(大约 20 个字段)并检索一个数字。

我考虑过使用 HTTP POST 并在请求正文中发送一个 JSON 对象。这里的问题是,我的 Web 服务支持 SOAP-WS 和 REST,而这种方法不属于这些类别中的任何一个。

我的问题是,这里有哪些选项?我可以使它适合 RESTful WS 吗?

【问题讨论】:

    标签: web-services rest soap


    【解决方案1】:

    正如您所提到的,当您在资源上公开 CRUD 操作时,REST 是有意义的。通常这些资源被持久化在一些数据库或存储机制中。

    在您的情况下,我猜没有存储或资源(您提供一堆数字并返回结果,没有任何内容被存储,是真的吗?)。所以你将无法真正将这样的 WS 称为“RESTful”。

    也就是说,REST 更像是一种“哲学”。你可以拿走你喜欢的东西并使用它们。您实现 POST 的想法,在您的输入中采用 JSON 结构并返回带有结果的 JSON,这听起来不错。您还可以发布“application/x-www-form-urlencoded”内容(常规表单提交并将结果返回为“text/plain”,如果有意义的话。

    我们的想法是构建一个易于理解和易于操作的WS。与 SOAP-WS 完全相反。 ;)

    【讨论】:

      【解决方案2】:

      经过一番研究,我发现这篇文章与这个讨论非常相关: http://info.apigee.com/Portals/62317/docs/web%20api.pdf

      【讨论】:

      • 该网站需要登录。
      【解决方案3】:

      我看不出为什么不能是 RESTful。将特定的计算运行视为具有自己身份的资源 (/calculation/ID123);然后,您可以对/calculation 进行 POST 以创建一个新参数,在 /calculation/ID123/paramA 上 GET/PUT 以使用特定参数,并在 /calculation/ID123/result 上 GET 以检索计算结果(或说明由于某种原因,计算结果不可用)。当然,/calculation 上的 GET 将检索您可以查看的已保存计算列表,/calculation/ID123 上的 GET 将检索上述子资源的描述(以及您想要的任何其他信息)提供),清除特定计算是一个 DELETE。

      拥有大量子资源和高度瞬态资源并没有错。要记住的重要一点是,客户端永远不应该铸造 URL。 (我不知道内容协商在这种情况下是否如此有用;这真的取决于我想的特定计算。)

      【讨论】:

      • 恕我直言,这似乎有点矫枉过正。我相信这里问题的自然本质是 function 就像在f(x)= ... 中一样,虽然可以强制执行,但这并不是真正的资源。
      猜你喜欢
      • 2023-04-01
      • 2023-03-08
      • 2012-05-11
      • 1970-01-01
      • 1970-01-01
      • 2012-05-18
      • 1970-01-01
      • 1970-01-01
      • 2016-10-01
      相关资源
      最近更新 更多