往常的手机端应用,不论是iOS还是Android, 不联网的简直屈指可数。 那手机的的应用怎样调用效劳器提供的接口,来完成业务功用呢? 在设计的时分需求思索三方面的问题 【通讯协议】 其实很简单, 最常见的措施就是应用Http协议, 效劳器端对外提供Http的接口;客户端向效劳器发出GET, POST央求, 调用接口,从效劳器的响应中获取数据。 当然写Http底层的代码也很累, 你得把数据组织成Http协议的header ,body ,经过网络发送进来。 还得解析效劳器的响应, response code (像200, 500 ), response body 等; 假如要遇到发送文件,还得支持MultiPart。 绝对是又脏又累的活,还很容易出错。 还好往常不少开源的代码曾经替你把这些脏活累活曾经干了,能够直接运用, 例如大名鼎鼎HttpClient , 运用这些代码你完整不用思索Http完成的细节, 只需求知道效劳器端接口的协议即可。 【 接口协议】 主要包含三个部分 (1) 接口的url : 例如 https://www.mybank.com/interface/login (2) 是GET 还是 POST ? (3) 参数 , 例如 username=xxxx , password=xxxx (4) 响应的数据 , 能够是xml , 也能够是json , json 往常的运用比较普遍。 知道了这些东西, 能够轻松的写一段HttpClient 代码来调用了, 下面的代码就是经过Post的方式来向效劳器端发送用户名和密码, 做登录操作 Request.Post("https://www.mybank.com/interface/login") .bodyForm(Form.form().add("username", "vip").add("password", "secret").build()) .execute().returnContent(); 留意上面的代码用了HttpClient 的Fluent API, 这个API用起来有一口吻写到底的觉得, 读起来很温馨。 这里能找到Fluent API的细节, 这里再强调一下, 开源软件自带的例子和教程是十分好的学习资料, 网上很多的文章其实就是对这些东西的破碎的翻译, 最好是练好英文, 阅读最权威的,原汁原味的资料。 【 会话管理】 我们知道,用户经过阅读器登录网站以后, 效劳器能够产生session (会话), 这个session 通常会以cookie的方式(在Http协议的Header 中)发送给阅读器, 阅读器需求保存起来, 再次访问网站的时分, 会把cookie带过去, 这样效劳器就知道用户是谁了。 session 普通有个过时时间,例如30分钟, 超越这个时间假如阅读器不再访问的话, 这个session 就过时了, 需求重新登录。 手机端应用当然也能够模仿阅读器, 以同样的方式处置, 登录以后,就把效劳器发的session ID 保存起来, 下次访问其他接口时把这个session 发过去就能够了。 但是你认真想一下,手机和阅读器是不一样的: 手机端经常是登录以后, 能够长时间不操作(例如7天), session 也不会过时。 很多手机端应用能够坚持很长时间的会话状态, 例如7天以内不操作都不会过时, 7天以后才会请求重新登录。 这样效劳器针对阅读器搞的Cookie 超时时间 30分钟就太短了。 换句话说,手机端应用由于操作的特性, 需求坚持一个长会话(3天, 7天。。), 传统的session机制不适合。 这时分需求我们自己来设计完成一个会话的管理机制: 1. 手机端应用调用效劳器端的登录接口。 2. 效劳器生成一个token , token 能够经过算法设计成一个随机的字符串, 让黑客无法猜出。 效劳器把token 放到缓存或者数据库中, 设置一个过时时间,例如7天 3. 效劳器把token 发回给手机端 4. 手机端保存该token , 每次访问其他接口的时分需求把token 也发到效劳器端做认证, 假如效劳器端发现token 过时, 就会请求手机端重新登录 这样就完成了一个长时间的会话管理。 |