Web 服务架构
web service是一种服务(一种中间件技术),采用HTTP协议通信。通过web service可以将不同操作系统平台、不同语言、不同技术整合到一起。
RESTful Web 服务使用标准的 HTTP 方法 (GET/PUT/POST/DELETE) 来抽象所有 Web 系统的服务能力,而不同的是,SOAP 应用都通过定义自己个性化的接口方法来抽象 Web 服务,这更像我们经常谈到的 RPC。
- 基于SOAP协议的远程调用标准- soap web service
PC版本的web service客户端库非常丰富,例如XFile,Axis2,CXF等,但这些开发包对于Android系统过于庞大,也未必很容易移植到Android系统中。
适合手机的web service客户端的第三方的类库有一些,比较常用的有Ksoap2。Ksoap2是一个SOAP web service客户端开发包,主要用于资源受限制的Java环境,如Applets或J2ME应用程序(CLDC/ CDC/MIDP)。在Android平台中我们并不会直接使用ksoap2,而是使用ksoap2 android。KSoap2 Android 是Android平台上一个高效、轻量级的SOAP开发包,等同于Android平台上的KSoap2的移植版本。
- RESTful Web service
APP使用HTTP来收发数据。
Java的一个轻量级的REST框架,可用于调用一个RESTful Web服务,并转换响应成客户端应用程序定制的值对象。由于它的简单,resting适合Android等手持设备。
•暴露简单的get(),post(),put()和delete()方法来消费REST服务
•支持像JSON,XML,ATOM和YAML所有常用的MIME类型
•启用的REST风格的Web服务HTTP和HTTPS(SSL)调用
•支持basic authentication(基本身份验证)
•支持代理
•支持转型过程中任意复杂的编组数据和解组
•支持在REST请求集合定制代表性
•轻量级,操作简单,快捷。非常适用于Android系统。
Android HTTP客户端
Android官方提供了2个客户端开发包,都均支持HTTPS、流媒体上传和下载、配置超时、支持IPv6、连接池。
- HttpURLConnection
优点:
更加通用、轻量级的客户端,适合大多数应用
API比较集中
缺点:
较少的API使得维护起来比较容易
Froyo之前,有不少bug,尤其是尝试关闭一个正在读取的InputStream 时会污染连接池。解决方案是禁用连接池。
在Gingerbread时,通过增加transparent response compression头【Accept-Encoding: gzip】对响应进行压缩解决该问题。但导致HTTP头 Content-Length不能真实反映响应数据大小。
同时对HTTPS进行了改进。
Server Name Indication (SNI)
session tickets
在Ice Cream Sandwich时,增加response cache。使用时web服务器需要在响应里增加HTTP头cache headers。
Fully cached responses are served directly from local storage
Conditionally cached responses must have their freshness validated by the webserver.
Uncached responses are served from the web.
- Apache HTTP Client
核心类:DefaultHttpClient、AndroidHttpClient
优点:
适合web浏览器
可伸缩
海量、灵活的API
稳定的实现,有很少的bug
更加贴近 Web 本身的工作方式
缺点:
海量的API使其改进起来而且不破坏兼容性变得困难,Android团队不太积极。
对比:在Froyo之前,Apache HTTP client有更少的bug,是最好的选择。
在Gingerbread 及以后,HttpURLConnection 是最好的选择。因为API简单,更小,Transparent compression和response caching减少了网络请求次数、加快了速度、省电。新的应用应该使用HttpURLConnection 。