简介
Web 服务是一个软件接口,它描述了一组可以在网络上通过标准化的 XML 消息传递访问的操作。Web Service 最基本的组成部分为服务的提供者(Service Provider)和服务的请求者(Service Requester)。Web Service 两端的应用是通过基于标准的 XML 格式的协议进行通信的,这种最常用的协议就是 SOAP(Simple Object Access Protocol)。Webservice本来是个通用词汇代表所有基于web的服务,后来似乎变成了某种基于XML的RPC协议的专用词汇。Web service是应用程序组件,可以被其他应用程序使用,不是框架,甚至不是一种技术, 而只是一种跨平台、跨语言的规范。
实现方式
WebService原来有两种方式,一是SOAP协议方式,在这种方式下需要WSDL,UDDI等,二是REST方式,这种方式根本不需要WSDL,UDDI等。
REST是完全不同的思路,它充分利用了HTTP协议的4个主要verb把RPC操作分成4类:- GET:进行幂等的资源获取操作- POST:创建资源- PATCH:修改资源- DELETE:删除资源仔细想一下这其实就是数据库的CRUD操作POST=createGET=readPATCH=updateDELETE=delete
RESTful是个形容词,形容根据这个思路设计出来的REST风格的API
SOAP : 什么是SOAP,其实SOAP最早是针对RPC的一种解决方案,简单对象访问协议,很轻量,同时作为应用协议可以基于多种传输协议来传递消息(Http,SMTP等)。但是随着SOAP作为WebService的广泛应用,不断地增加附加的内容,使得现在开发人员觉得SOAP很重,使用门槛很高。在SOAP后续的发展过程中,WS-*一系列协议的制定,增加了SOAP的成熟度,也给SOAP增加了负担。 一个RPC call就是把一个XML文档post到某个URL下,这个xml文档里写明我要调用的函数名和参数,服务端会返回一个xml把结果返回,SOAP消息完全就是将Http协议作为消息承载,以至于对于Http协议中的各种参数(例如编码,错误码等)都置之不顾。这样的设计是把HTTP当传输层,可以把传输层替换成其他协议只要能在客户端服务端之间传输xml就可以。流程:客户端——> 阅读WSDL文档 (根据文档生成SOAP请求) ——>发送到Web服务器——>交给WebService请求处理器 (ISAPI Extension)——>处理SOAP请求——> 调用WebService——>生成SOAP应答 ——> Web服务器通过http的方式交给客户端。
REST :REST其实并不是什么协议也不是什么标准,而是将Http协议的设计初衷作了诠释,在Http协议被广泛利用的今天,越来越多的是将其作为传输协议,而非原先设计者所考虑的应用协议。它充分利用了HTTP协议的4个主要verb把RPC操作分成4类:- GET:进行幂等的资源获取操作- POST:创建资源- PATCH:修改资源- DELETE:删除资源仔细想一下这其实就是数据库的CRUD操作POST=createGET=readPATCH=updateDELETE=delete,而互联网上的各种资源就好比数据库中的记录(可能这么比喻不是很好),对于各种资源的操作最后总是能抽象成为这四种基本操作,在定义了定位资源的规则以后,对于资源的操作通过标准的Http协议就可以实现,开发者也会受益于这种轻量级的协议。
webService超时时间的JAVA中设置
1、在 Spring+CXF 的 WebService 环境下,客户端有两个时间属性是可配置的,分别是 ConnectionTimeout 和ReceiveTimeout。ConnectionTimeout — WebService 以 TCP 连接为基础,这个属性可以理解为 tcp 的握手时的时间设置,超过设置的时间长则认为是连接超时,以毫秒为单位,默认是 30,000 毫秒,即 30 秒。ReceiveTimeout — 这个属性是发送 WebService 的请求后等待响应的时间,超过设置的时长就认为是响应超时,以毫秒为单位,默认是 60,000 毫秒,即60秒。在调用 CXF 服务的 xml 文件中加入下面的配置:<!-- 所有服务 -->
<http-conf:conduit name="*.http-conduit">
<http-conf:client ConnectionTimeout="10000" ReceiveTimeout="30000"/>
</http-conf:conduit>
2、Rest:Java 利用 HttpClient 调用 REST 服务时,关键是给 HttpParams 设置超时,如下:
HttpParams params = new BasicHttpParams();
params.setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 5*1000); //设置连接超时
params.setParameter(CoreConnectionPNames.SO_TIMEOUT, 30*1000); //等待数据的最大时
HttpClient client = new DefaultHttpClient(params);
参考:
https://stevenjohn.iteye.com/blog/1442776
https://www.zhihu.com/question/30547012
RESTful Web Service 架构剖析https://www.jianshu.com/p/a79a1d01b557
GitHub 的 REST 接口文档 https://developer.github.com/v3/
入门实例:https://blog.csdn.net/yangwenxue_admin/article/details/51059125
https://blog.csdn.net/jiuqiyuliang/article/details/48825577
https://www.cnblogs.com/pony1223/p/7847323.html
webService超时时间的JAVA中设置https://blog.csdn.net/samyang1/article/details/79309223
Web Service应用之CXF开发 https://blog.csdn.net/sinat_32366329/article/details/79334630
Web Service 那点事儿(1)https://my.oschina.net/huangyong/blog/286155
Web Service 那点事儿(2)—— 使用 CXF 开发 SOAP 服务https://my.oschina.net/huangyong/blog/286439
Web Service 那点事儿(3)—— SOAP 及其安全控制 https://my.oschina.net/huangyong/blog/287791
Web Service 那点事儿(4)—— 使用 CXF 开发 REST 服务 https://my.oschina.net/huangyong/blog/294324
网友评论