我是RESTful webservice的新手。无论我通过互联网阅读有关RESTful webservice的内容,我都知道REST与servlet + webservice类似。
我们的传统网络服务看起来像JSP-> Servlet - >服务 - > DAO - >数据库中。
我希望我的问题很明确。
请帮帮我。 提前谢谢。
答案 0 :(得分:0)
我们可以通过多种方式实现机器对机器的通信。 Web服务还有助于在不同平台上进行的应用程序之间的通 例如,.net GUI可以调用java服务器端程序来获取数据。 REST就是其中之一,基于HTTP协议。
SOAP Web服务非常重要(使用大量XML),因为REST很简单,您只需使用REST即可公开任何APIS。
客户端可以使用HTTP谓词GET,POST,PUT和DELETE来调用作为REST服务公开的服务,其含义与HTTP中的含义相同。
RESTful Web Services公开其资源的状态。
可以使用REST以任何格式(Json,XML ...)查询和表示“员工”数据。 Rest不会替换层次结构中的Servlet,实际上基于HTTP的REST方法都写在这个servlet上。
请浏览此网址:http://docs.oracle.com/javaee/6/tutorial/doc/gijqy.html
使用REST与移动设备或其他设备上的浏览器体验无关。这完全取决于所使用的客户端技术以及您的浏览器与这些技术的兼容性。
使用REST是一个使用简单的AJAX调用在客户端访问数据的好主意。
答案 1 :(得分:0)
REST表示具象状态转移。这是一种考虑在客户端和服务器之间架构网络通信的方法,重点是将资源从服务器传输到客户端再返回。
要了解这一点的重要性,首先考虑一个不同的架构,远程过程调用。这是客户端在服务器上调用函数的地方,就像客户端上存在该函数一样。
因此,您要编辑服务器上存在的照片。您的客户端是一个使用RPC实现此目的的照片编辑应用程序。您希望模糊照片,以便客户端使用RPC调用blur()函数,服务器会模糊图像并发回更新的图像。然后你想旋转图像,所以你的客户调用rotate()函数,服务器旋转图像并将旋转的图像发送给你的客户。
您可能已经注意到两个问题。首先,每次对照片执行操作时,服务器都需要做一些工作并将更新后的图像发回给您。这会占用大量带宽。
如果明天服务器开发人员(可能与客户端开发人员无关)决定rotate()是错误的函数名称,它应该是rotate_image(),并且他们更新服务器,会发生什么。您的客户端继续调用rotate()但现在失败了,因为客户端上不存在这样的功能。
REST是思考客户端/服务器通信的另一种方式。不是告诉服务器对资源执行操作(例如,旋转照片),为什么客户端不仅要获取资源的表示并执行它想要的所有操作(模糊,旋转等)然后将资源的新状态发送回服务器。
如果你这样做,客户端和服务器之间的通信协议可以保持非常简单,只需要很少的更新。您所需要的只是客户端获取资源和函数以将其重新放回服务器的功能。客户端必须知道如何模糊图像和旋转图像,但它不需要知道如何告诉服务器执行此操作,它只需要告诉服务器保存更新的图像。
这意味着客户端的开发人员可以独立地向服务器的开发人员实施新功能。如果客户端的开发人员与服务器无关(Firefox的开发人员与纽约时报网站无关,反之亦然),则非常方便。
HTTP是遵循这种架构模式的一种协议,它允许Web增长。 HTTP中有一小组动词(函数),它们只关注在客户端和服务器之间来回传输资源的表示。
使用HTTP,您的照片客户端只需向服务器发送GET
消息即可获取照片。然后,客户可以对照片做任何想做的事情。完成后,它会将带有更新照片的PUT
消息发送到服务器。
由于协议中没有特定于域的操作(模糊,旋转,调整大小),因此该协议也可用于任意数量的资源。如果资源是HTML文档,WAV文件,Javascript脚本,PNG图像,HTTP并不关心。客户显然关心,因为它需要了解它获得的资源,服务器也可能关心。但是客户端和服务器之间的协议并不需要关心。 HTTP知道的唯一事情是HTTP头中有一个变量Content-Type
,服务器可以告诉客户端这是什么类型的资源。
这很强大,因为这意味着您可以独立更新客户端以更新服务器而无需更新传输协议。 HTTP已经多年没有更新。另一方面,HTML不断更新,Web服务器和Web浏览器不断更新(Chrome版本为33)。这些更新可以彼此独立发生,因为HTTP从不(很少)更改。
10年前的Web浏览器仍然可以通过HTTP与现代Web服务器通信以获取资源。浏览器可能无法理解资源,说它获得了无法理解的WebM视频,但它仍然可以在没有网络通信失败的情况下获得此资源。
与上面的RPC示例相比,如果服务器将rotate()
更改为rotate_image()
,则客户端服务器通信将中断。每个客户端都必须使用这个新功能进行更新,否则在尝试与服务器通信时会崩溃。
因此,REST是一种思考客户端服务器通信的方式,它是一种架构设计/模式。 HTTP是一种在这种思维方式下工作的协议,它专注于简单地在服务器和客户端之间传输资源状态。
现在重要的是要了解历史上很多人,包括网络开发者,都没有得到这个。因此,您可以使用开发人员将动词放入资源名称以尝试模拟HTTP上的远程过程调用。像
这样的事情获取http://www.mywebsite.com/image/blur_image
他们会将URI /image/blur_image
硬编码到他们的客户端,然后尝试确保开发服务器的人永远不会更改URI blur_image
。您将回到RPC的所有问题。一旦服务器人员将资源blur_image
(实际上不是开始使用的资源)移动到/image/blur_my_image
,客户端就会崩溃,因为它将硬编码作为要执行的操作,而不是简单的得到/image
并做任何想做的事。
因此,网上有很多关于做错的例子。 任何与客户端和服务器通信紧密结合的事情都是REST错误的。您的客户端应该能够在URI更改或更新内容类型的情况下生存,而不会崩溃。它可以抱怨它不了解资源(例如Netscape Navigator 2.0抱怨它不知道HTML5文档是什么),但它应该抱怨URI已经改变。这是REST的可发现性方面,我没有做太多,但基本上你的客户端应该能够从服务器http://www.mywebsite.com
的根目录开始,如果它理解了内容类型,它应该是能够继续使用它想要的资源。除了服务器的根之外,您永远不需要将URI硬编码到客户端。
我可以写一本关于这些东西的书(很多人都有),但我希望这可以很好地介绍REST实际上是什么。
答案 2 :(得分:0)
@javafan我刚刚查看了您提供的mykong示例。请注意,这不是标准的http servlet实现,它是一种Jersy方式的implimentinmg休息。因此,当您映射所有URI时,请通过此servlet com.sun.jersey.spi.container.servlet.ServletContainer并使用注释@path等编写类,Jersy运行时环境将为您执行必要的处理,如转换输入和输出对象到必要的格式(json,xml等),具体取决于您的配置。您可以编写一个简单的servlet并在其中添加带有@path注释的方法,并在您发出相应的请求时调用它。但是doGet和doPost方法是标准的servlet方法,默认情况下处理GET和POST方法。您可以将另一个方法添加到同一个servlet,并添加更多限定符来处理您的请求。 @GET,@ Produces(" xml")等 我希望这有帮助。