`

App后端服务器开发小结

 
阅读更多

本文出自iteye http://fair-jm.iteye.com/ 转截请注明出处

 

app的API与网站使用的API较大的区别是其生命周期更长.API的修改需要做到向后兼容.  

app的API设计要考虑到app的版本问题.API本身需要可以演化.    

 

怎么拿到App的版本?    

--  

这不是一个技术问题而是一个设计问题,需要和app开发协商.  

比如User-Agent字段,让app发送请求都带上一些标志.  

后端建议做成一个工具类,可以从Request中抽取这些数据.  

比如:   

 

public AppInfo getAppInfoFromRequest(Request request) {  

....  

`AppInfo`中需要包含系统标识,app标识(应用在一个服务器服务多个app的情况下)以及app版本.比如

	public class AppInfo {
		private int systemType;
		private int appType;
		private String appVersion;
		...
	}
	
	public enum SystemType {
		ANDROID(0),
		IOS(1),
		WP(2);
		private int id;
		.....
	}
	
	public enum AppType {
		APP1(0),
		APP2(1);
		private int id;
		...
	}

 

 

 有些时候可能app内的webview也要对app做这些判断  

 对于安卓可以,一些webview的请求可能无法自定义UA 可以通过`X-Requeted-With`来判断  

 但这样只能判断出系统和App类型 版本无法知道

 

API的演化  

--  

 

这是app端也要做的事.

如果是用`JSON`的数据,需要app端做JSON对象增加属性时的兼容

举个例子 如果移动端用jackson做反序列可以让他们指定一下`JsonIgnoreProperties`或者在ObjectMapper中进行配置

`objectMapper.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false) `

 对于只返回一个`String`或者返回`JSON Array`的情况,务必也用`JSON Object`包裹一下,以免以后需要加属性造成没地方可加的尴尬.  

对于无法演化的情况,比如app那边界面大改,已有的接口不能符合,一些字段的意义改变的情况,可以在API后加上`/v2`的形式或者在请求参数中加上`?version=2`的方式,看个人喜好.  

 

WebView使用场景  

--

适合使用WebView的页面是版本无关的.

比如一个页面,在1.1版本中主色调是绿色,在1.2版本中是红色,在1.3版本中是黄色.以后再改变新版本样式但需要老版本保持不变.对于这种不同的版本需求不同,为何不用native来做?  

工作中最多的一次一个url对应了6个页面,本来挺简单的一个action因为要兼容2个app的3个版本做成了一大坨.  

如果是因为工作量的问题,建议页面的地址由后端提供API给,而不是在移动端写死.  

 

新技术推动  

--

`react native`之类的技术推动下,后端的一些工作就能轻松很多了. 

1
0
分享到:
评论

相关推荐

    0App 与后端服务器通信方法简介(2).md

    ### 小结 通过本小册的学习,读者将能够掌握App客户端与后端服务器之间进行通信的方法,包括HTTP协议的GET与POST请求方法、JSON数据格式的使用、以及后端服务器的基础搭建和优化。此外,还将学习到如何配置腾讯云...

    2服务器端组件框架的选择与介绍(2).md

    在小结中,作者还强调了整个服务器端组件框架的选择都是为了构建一个简洁、高效且易于部署的App后端服务器。通过选择合适的编程语言、HTTP服务器框架、操作系统和数据库,以及高效的ORM工具,可以为应用程序的开发...

    基于uni-app的智能高佣报备系统设计与实现.doc

    uni-app的跨平台特性解决了技术难题,JFinal的轻量级设计降低了服务器端开发成本,而微信小程序和HBuilderX的流行度则确保了操作可行性。 2.2 系统功能需求分析 主要功能包括用户注册登录、商品浏览、佣金报备、...

    基于Android的计算机二级练习簿APP的设计与实现毕业论文.doc

    其次,J2EE(Java Platform, Enterprise Edition)是一种用于构建企业级Web应用的技术,本文中可能用于后端服务器处理,如用户数据管理、题目同步等功能。然后,MySQL是一个流行的关系型数据库管理系统,用于存储...

    基于Android的计算机二级练习簿APP的设计与实现--毕业论文.doc

    - **J2EE**:Java企业版,用于构建后端服务器,处理用户请求,存储和管理数据。 - **MYSQL**:关系型数据库管理系统,用于存储用户数据和试题信息,支持高效的数据查询和管理。 - 开发过程中可能还会用到Git进行...

    新闻网站后台管理系统的设计与实现

    小结中,文章会强调新闻网站后台管理系统对于新闻行业的价值,以及本研究在解决现有问题上的贡献,为后续的开发实践提供理论依据和技术支持。 通过以上分析,我们可以看出,新闻网站后台管理系统的设计与实现涉及多...

    小程序云开发初探(小结)

    【小程序云开发初探(小结)】 云开发是微信平台推出的一项创新功能,它为开发者提供了一站式的后端解决方案,包括服务器、数据库和资源存储。这项服务旨在简化小程序的开发流程,让开发者能够更加专注于前端用户体验...

    laravel开发宝典 实战视频课程

    ### 小结 本实战视频课程旨在为初学者提供一套完整的学习路径,涵盖 Laravel 框架的基础知识、核心组件使用以及高级特性等内容。通过理论讲解与实际案例相结合的方式,帮助学员快速掌握 Laravel 的核心技能,并能够...

    node.js基础知识小结

    总之,Node.js是一个强大的平台,它简化了Web开发,尤其是后端开发的过程。通过上述的知识点,新手开发者可以开始他们的Node.js学习之旅,逐步深入掌握这一技术。随着学习的深入,开发者可以逐渐接触到更多高级主题...

    travelibrary-微信小程序实战-流动图书馆.zip

    使用pm2部署安装pm2npm install -g pm2启动应用pm2 start app.js总结流动图书馆小程序是由三个人的小团队设计和开发的。我主要负责前后端的开发工作。这对从来没接触过服务端和小程序开发的我来说是一个挑战...

    详解vue-cli项目中的proxyTable跨域问题小结

    在开发环境中,`proxyTable` 可以将本地发出的请求转发到指定的服务器,从而规避同源策略。在 `config/index.js` 文件中找到 `proxyTable` 字段,配置如下: ```javascript module.exports = { dev: { // ... ...

    copyandpay-node:基本的,准备好使用 express 框架运行带有 COPYandPAY 集成的节点服务器

    输入:节点 app.js 您的服务器启动并侦听端口 3000 您应该可以访问 开始编辑 打开集成指南 route/index.js(后端,请求令牌并请求支付状态) views/checkout.jade (frontend, 整合COPYandPAY checkout) 2.每...

    BIEE变量使用

    #### 小结 通过本文对BIEE中库变量和介绍变量的详细介绍,我们可以看到这两种类型的变量在实际应用中的重要作用。库变量主要用于后端数据处理和配置,而介绍变量则侧重于前端的用户交互体验。合理利用这些变量不仅...

    新的主服务部署文档1

    ### 五、部署步骤小结 1. **拉取代码**: - 使用Git命令从指定仓库拉取Nginx项目代码和前端主服务代码。 2. **配置Nginx**: - 将拉取到的Nginx项目代码部署到指定目录。 - 设置Nginx代理配置,确保能够正确...

    React+ajax+java实现上传图片并预览功能

    小结 本文介绍了如何使用React、ajax和java实现上传图片并预览功能。这种功能可以应用于许多Web应用程序中,例如社交媒体平台、电子商务平台等。通过使用React、ajax和java,我们可以实现上传图片并预览功能,提高...

    react-razorpay-button:React JS中Razorpay的快速结帐按钮

    在React JS开发中,集成支付网关是提升用户体验的关键步骤之一。`react-razorpay-button`是一个专门针对React应用的库,它提供了一个简洁、高效的Razorpay快速结账按钮,使得用户能够轻松地进行在线支付。Razorpay是...

Global site tag (gtag.js) - Google Analytics