什么被归类为RESTful Web服务

时间:2009-08-11 17:51:15

标签: web-services rest

所以我目前有一个调用Web服务来检索数据的应用程序,我在网址上执行基本的HTTP GET,如www.example.com/service.asmx?param1=1&param2=2 这将返回一些我解析的xml。

我的问题是,这是否将其归类为RESTful Web服务?我在想不,但我想知道什么使它成为REST网络服务?

我知道有REST和SOAP Web服务,但上述情况会被归类为简单的HTTP GET Web服务?还是什么?

谢谢,我正在尝试将术语与概念相匹配,请原谅我,如果这有点过于基本。

5 个答案:

答案 0 :(得分:6)

您问题的直接答案是否。

打破你告诉我们的关于你的服务的内容我将讨论你的解决方案是什么不是RESTful。

  

HTTP GET就像这样的网址   www.example.com/service.asmx?param1=1&param2=2

您正在使用HTTP GET,因此使用一组有限的动词来通过URI访问某种资源。这是RESTful并且符合统一接口约束,只要服务器不违反关于GET允许执行的任何HTTP规则。

查看URL本身,您访问的资源并不明显,因此它暗示您的URL空间可能不会以便于执行RESTful设计的方式构建。但是,REST并没有对你的URL应该是什么样的限制(尽管很多人都认为太多了),所以你的URL没有什么不可靠的。

  

这会返回一些我解析的xml。

这是你的问题开始的地方。我在本声明中隐含地阅读的是客户端知道如何从XML中解析数据。这违反了REST的自我描述性约束。 http消息应包含客户端知道如何处理请求响应所需的所有信息。 media-type应该告诉客户端XML文档中有哪些信息。如果您的服务返回application / xml,那么客户端唯一知道的是该文档包含属性和元素。如果客户端使用带外知识来解析该XML,那么您将引入客户端和服务器之间的耦合。 REST的主要目标之一是消除这种耦合。

服务必须遵守许多其他约束才能被视为RESTful,但是如果服务符合要求,则不能提供有关您的服务的足够详细信息。

答案 1 :(得分:3)

REST服务是那些通常符合以下条件的服务:

  • 提供准确描述所请求资源的标识符。
  • 提供行为符合预期的服务GET请求是幂等的,POST更新记录,PUT创建,DELETE删除
  • 最小化存储在服务器上的状态
  • 通常会减少不必要的复杂性
  • 通过HTTP(虽然我已经看过其他实现,但它们在传统意义上肯定不是RESTful)

您的网址不是“非常”的原因是它包含非标识信息(例如.ASMX)。另外一些人认为添加url参数仅适用于过滤。 (但这并不意味着使用URL参数不是RESTful!)

如果REST似乎没有严格的规则,那么你就走在了正确的轨道上。

RESTful服务通常以XML格式处理,尽管如此,任何方式都不是硬性规则。

答案 2 :(得分:3)

直接回答你的问题是我不知道 您提供的有关Web服务的信息不够准确,无法将其归类为RESTful Web服务。

REST是一种架构风格(不是设计或实现技术),这意味着您必须遵循软件架构中的原则才能将其归类为RESTful:

  • 具有明确且统一的界面的客户端/服务器
    • 统一资源识别
    • 通过代表处理这些资源
    • 自我描述性消息:每条消息描述如何处理数据
    • 超媒体作为应用程序状态的引擎:通过以下链接发生状态之间的转换
  • 无状态
  • 资源的可缓存性
  • 分层系统

在做任何RESTful之前你必须咨询的第一个来源是Roy Fielding's PhD thesis,“发明REST的人”: - )

请注意,REST不指定URL方案,但在RESTful架构中有一些关于url方案的常见最佳实践,例如those used by Rails

答案 3 :(得分:1)

此网站上已经多次回答过这个问题。您应该查看Fielding's dissertation有关REST的权威来源。 His blog也有一些有用的帖子。

URI表示与REST无关,但是看看你的,看起来你的服务可能是RPC而不是REST。如果整个服务只有一个URI,你可以通过查询参数或标题调用它,那就是RPC,类似于SOAP。

REST最重要的概念是通过超文本发现和导航您的资源。您的API必须是媒体类型的说明。 API中唯一的单个URI是入口点。

答案 4 :(得分:0)

我认为你不会得到明确的答案。 REST和Web服务都是非常令人困惑的术语,现在你将它们组合在一起。

REST可能意味着,

  1. 严格来说,URL必须代表资源,并且必须使用正确的HTTP谓词(GEt / PUT / POST / DELETE)。我们这里有一个会议。如果它意味着这个,它拼写为ReST。
  2. 任何HTTP或Web协议,只要它使用查询参数并在请求中形成帖子。
  3. 任何HTTP协议。请求可以是XML或JSON。
  4. Web服务也有多重含义,

    1. 它曾经是指基于SOAP的SOA调用。
    2. 然后介绍REST风格的Web服务。它基本上是没有SOAP的SOA调用。我甚至看到人们使用没有SOAP标头的确切SOAP消息。
    3. 有些人认为必须使用WADL(相当于WSDL)来归类为Web服务,尤其是在JAX-RS社区中。