2014年3月2日星期日

[]Android REST Client架构实践 第一篇

本文自动转发自我的博客: http://www.haofengjing.org/?p=1653
摘要:今年一直断断续续在做一个基于昊哥的一套很重的REST API的Android Client,其实也是第一次做Android,而且是按照Google I/O 2010 – Android REST client applications(请自行翻墙:)的指导做一个REST的客户端,遇到各种问题所以特地记录一下。第一篇就概述一下: 1.REST API以及我所调用的的REST API的特点 2.Google I/O大会上提出的Android REST Client的建议架构 一、关于REST API REST架构的优势,广泛应用这些废话就不说了,网上的讨论都已经够多了,有兴趣的Google之吧,而REST的核心概念,解析这些我的另一个系列《REST学习实践》会陆续添加,这里就不赘述了。简单的说就是:1.用Url表示资源 2.对资源的操作包括获取、创建、修改和删除资源,这些操作正好对应 HTTP 协议提供的 GET、POST、PUT 和 DELETE 方法 二、从Dev角度总结我所调用的REST API的特点 1.提供两种Data Formats,JSON和XML,我用的JSON,插播一段JSON简介吧: JSON是一种传递对象的语法,对象可以是name/value对,数组和其他对象。 下面是段JSON代码 1: { 2: "skillz": { 3: "web": [{ 4: "name": "html", 5: "years": "5" 6: }, 7: { 8: "name": "css", 9: "years": "3" 10: }], 11: "database": [{ 12: "name": "sql", 13: "years": "7" 14: }] 15: } 16: } 使用JSON的原因主要是JSON的解析速度据称比XML快10倍,其实Javascript上用的更多一些,有比较好的支持。 2.Authentication 权限 由于REST本身并没有标准,所以似乎并没有对权限这块做什么规定,在一些需要登录使用的API上我们用的是一套类似于OAuth的授权机制: a.向REST Service请求Login b.取得一个临时Token c.在一段时间内在HTTP Header带Token请求受保护的内容 至于Token的生成和更新就是Server端的工作了。 3.REST Request Url内嵌查询表达式 昊哥的REST Service提供了一套强大的查询表达式,类似于一个简单的编译器,Client可以在Request中带类似"q=AND(keyword:智能手机)(NOT(keyword:Nokia))(price:<1000)(city:~湖北~武汉)"来查询"在武汉1000元以下不是Nokia的智能手机". 那么在这套REST API当中一个标准请求的Example就是 http://www.restexample.com/items/@all?c={PAGEINDEX}&max-results={PAGESIZE}&q={QUERYEXPRESSION}&orderby={ORDERBY}&partial={WANTEDFIELDS} 三、Google I/O 2010 Session上建议的Android REST Client App的架构 第一篇的话我就先抛个引子吧,上两个Session里的架构示例: 1.错误的范例 Android_rest_wrong 这其实还算是一般HTTP Client写法中比较好的,因为另开线程去处理HTTP Client,不会阻塞UI线程,但缺点也一样突出: Android OS可能会随时干掉这个Activity,比如在运行APP的时候突然接个电话就有可能被杀死,那么数据没有持久化的话,只能再次请求,这样糟糕的体验加过多流量足以让用户跟你的APP说滚蛋了…….. 2.最佳范例 Android_rest 这是Google I/O上主推的建议Android REST Client,它的优点自然是解决了上面例子的缺点了,但Google不太厚道呀,说了自己的Android 上GMail,GReader等都是用这套架构完成的,却没给Demo代码,这里面用到的IntentService和ResultReceiver的文档支持也很少,搞得各大论坛上都有人讨论但实现的方案倒不多,希望本系列能给出一个比较完整的解决方案吧~~ 本文就完了,下一篇主要对比Google I/O Session上的Android REST Client架构………. PS:关于昊哥很重的WCF REST Service,有兴趣的可传送至昊哥的Blog文章我的WCF4 Rest Service及Entity Framework with POCO之旅

没有评论:

发表评论