昨天我有一个面试,我遇到了一个有趣的问题,我被卡住了。问题“你怎么能说 Restful web 服务是 web 服务?”。我试图解释所有可能的证明方法。但是所有的答案都被“Servlet 可以做同样的事情。所以 Servlet 是宁静的 Web 服务?”这个问题所阻止。
任何人都可以分享你的想法吗?
昨天我有一个面试,我遇到了一个有趣的问题,我被卡住了。问题“你怎么能说 Restful web 服务是 web 服务?”。我试图解释所有可能的证明方法。但是所有的答案都被“Servlet 可以做同样的事情。所以 Servlet 是宁静的 Web 服务?”这个问题所阻止。
任何人都可以分享你的想法吗?
要回答您的问题,我们首先要问什么是 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 做了什么
现在,如果一个 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(尽管如此)。
我认为答案很明显,所以他们给你的问题有点奇怪。基于 SOAP 的服务和完整的 REST 服务都使用 HTTP 作为传输机制,因此它们实际上是 Web 服务。
它们的不同之处在于,基于 SOAP 的服务更严格地由规范定义,因此 REST-full 服务更像是一种架构风格,在其实现中不受限制。
有关上述内容的详细信息,请参阅此帖子
您对此类问题的处理方法应该是自下而上的。从Service的定义开始。然后定义 Web 服务,然后您就可以轻松区分什么是 Web 服务,什么不是。一般来说,对于这样的讨论,我这样攻击它:
HTTP
在文本请求/响应中)都是网络服务。VERB
RESTful服务在资源NOUN
的分离和概念方面增加了更多约束。Java 世界中的所有 Web Restful 服务都是通过 Servlet 编写的,Servlet 是用于处理的低端实现HTTP
。如果传输不是HTTP
,它是服务而不是 Web 服务 :)
好吧,您可以使用 Servlet 设计 RESTful Web 服务。
Servlet 帮助您为 HTTP 请求创建 HTTP 响应。RESTful Web 服务位于 HTTP 协议之上,因此您可以使用 Servlet 创建 REST 服务。
任何基于 HTTP 的代码(任何语言等)只要符合 REST 的要求,都可以是一个 RESTful Web 服务......
见:http ://en.wikipedia.org/wiki/Representational_state_transfer