java - 如何证明Restful Web service是一个web服务?

标签 java web-services rest servlets

<分区>

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

谁能分享你的想法?

最佳答案

要回答您的问题,让我们先问什么是网络服务?

  • 在纯粹抽象的术语中,

A web service is a method of communication between two electronic devices over the World Wide Web. (Wikipedia)

  • 现在,公认的行业规范是两个设备通过互联网进行通信的XML 消息(这使得它成为 inter-operable)

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

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

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

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

现在开始你的问题Servlets 是否是 restful web 服务,让我们看看 Servlets 做了什么

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

现在如果一个 servlet 是这样写的,它可以通过下面的 URL 调用

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

这个小服务程序

  • 映射到 URL 模式/services/getstockquote

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

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

    这个servlet不满足下面的basic requirements吗? RESTful 场景?

  • 显式使用 HTTP 方法

  • 无国籍。

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

  • 传输 XML、JavaScript 对象表示法 (JSON),(本质上是文本)

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

关于java - 如何证明Restful Web service是一个web服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18798438/

相关文章:

java - ChartRenderingInfo 对于图表区域返回 0

java - 双数组添加中的 Double ArrayList

java - 如何从 Java 中的字符串保存图像文件?

java - BufferedImage 上的 JButton 透明度

java "Class file contains wrong class"错误

c# - 如何在 Web 安装项目中创建新的应用程序池?

java - 从一个 webapp 抛出 WebapplicationException 并在另一个 webapp 上获取 UniformInterfaceException

java - 从 SpringMVC 中的 REST API 返回动态类型的最佳实践是什么

java - ContainerRequestFilter 方法未被调用

json - 在 Angular4 中将嵌套 JSON 响应设置为 ag-grid 的 rowdata