4

昨天我有一个面试,我遇到了一个有趣的问题,我被卡住了。问题“你怎么能说 Restful web 服务是 web 服务?”。我试图解释所有可能的证明方法。但是所有的答案都被“Servlet 可以做同样的事情。所以 Servlet 是宁静的 Web 服务?”这个问题所阻止。

任何人都可以分享你的想法吗?

4

6 回答 6

1

要回答您的问题,我们首先要问什么是 Web 服务?

  • 用纯粹抽象的术语来说,

Web 服务是通过万维网在两个电子设备之间进行通信的一种方法。(维基百科)

  • 现在,这两种设备通过 Internet 进行通信的公认行业规范是使用XML 消息(这使得它可以 互操作

  • 这给我们带来了不同类型的 Web 服务,主要分为 SOAP 和 RESTful。

  • SOAP Web 服务使用 XML(它符合特定协议或 xml 模式,换句话说,称为WSDL)。因此,SOAP Web 服务对 Web 服务与其客户端之间的消息交换方式设置了某些规则/规定。可以使用除 HTTP 之外的任何方便的协议来交换消息。

  • 现在在RESTful 场景中,您仍然交换消息(xml/json 等)但没有新的附加规范(我知道WADL,但它发明了更多用于提供工具支持 RESTful 并且与 RESTful Web 服务本身无关

  • 在 RESTful 中,没有新的协议定义(用于交换消息)。它使用已经建立的 HTTP 协议规范,在 URL 中传递参数作为路径元素和发送数据的 HTTP 方法(即 GET/POST/PUT/DELETE)。

现在来回答你的 Servlet 是否是 RESTful Web 服务的问题,让我们看看 Servlet 做了什么

  • 接受 GET/POST 请求
  • 返回一个 HTML(一般来说)(本质上是 XML)

现在,如果一个 servlet 是以这种方式编写的,那么它可以通过以下 URL 调用

http://www.myrestwebservices/services/getstockquote/GOOG

这个小服务程序

  • 映射到 URL 模式 /services/getstockquote

  • 获取 GOOG 作为 URL 路径中的输入数据,它可以解析、查询某些系统以获取 Google 的最新股票报价。

  • 将数据以 text/xml 形式返回给客户端

    这个 servlet 不满足RESTful 场景的以下基本要求吗?

  • 显式使用 HTTP 方法

  • 无国籍。

  • 公开类似目录结构的 URI。

  • 传输 XML,JavaScript Object Notation (JSON),(本质上是文本)

所以从技术上讲,是的,Servlet 是一种 RESTful Web 服务,但这可能不足以满足 Web 服务本身的一般业务需求。因此,对于一个成熟的 RESTful Web 服务,我们需要一个专门为满足这些基本业务需求而编写的 servlet(尽管如此)。

于 2013-09-14T08:43:21.160 回答
0

我认为答案很明显,所以他们给你的问题有点奇怪。基于 SOAP 的服务和完整的 REST 服务都使用 HTTP 作为传输机制,因此它们实际上是 Web 服务。

它们的不同之处在于,基于 SOAP 的服务更严格地由规范定义,因此 REST-full 服务更像是一种架构风格,在其实现中不受限制。

于 2013-09-14T11:53:05.457 回答
0
  1. 一切都是资源
  2. 所有资源都公开一个标准接口 GET、POST、PUT、DELETE
  3. REST 服务是幂等的
  4. 资源可以链接到其他资源
  5. 多重表示
  6. 无状态通信

有关上述内容的详细信息,请参阅此帖子

于 2013-09-14T05:04:02.390 回答
0

您对此类问题的处理方法应该是自下而上的。从Service的定义开始。然后定义 Web 服务,然后您就可以轻松区分什么是 Web 服务,什么不是。一般来说,对于这样的讨论,我这样攻击它:

  1. 任何定义客户端合同的可重用代码都是服务。桌面上的打印机驱动程序是一项服务。
  2. 任何可以在网络上使用的服务(HTTP在文本请求/响应中)都是网络服务。
  3. VERBRESTful服务在资源NOUN的分离和概念方面增加了更多约束。
  4. Servlet 与 REST 的不同之处在于 Servlet 中没有契约,因此 Servlet 本身不是服务。
  5. 没有人可以阻止想要使用 Servlet 实现 RESTful 服务的人 - 但在一个存在框架以帮助简化开发的世界中,这对于 REST 开发来说太低了!

Java 世界中的所有 Web Restful 服务都是通过 Servlet 编写的,Servlet 是用于处理的低端实现HTTP。如果传输不是HTTP,它是服务而不是 Web 服务 :)

于 2013-09-14T05:05:33.590 回答
0

好吧,您可以使用 Servlet 设计 RESTful Web 服务。

Servlet 帮助您为 HTTP 请求创建 HTTP 响应。RESTful Web 服务位于 HTTP 协议之上,因此您可以使用 Servlet 创建 REST 服务。

于 2013-09-14T05:00:47.047 回答
0

任何基于 HTTP 的代码(任何语言等)只要符合 REST 的要求,都可以是一个 RESTful Web 服务......

见:http ://en.wikipedia.org/wiki/Representational_state_transfer

于 2013-09-14T05:00:50.680 回答