本文出自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`之类的技术推动下,后端的一些工作就能轻松很多了.
相关推荐
### 小结 通过本小册的学习,读者将能够掌握App客户端与后端服务器之间进行通信的方法,包括HTTP协议的GET与POST请求方法、JSON数据格式的使用、以及后端服务器的基础搭建和优化。此外,还将学习到如何配置腾讯云...
在小结中,作者还强调了整个服务器端组件框架的选择都是为了构建一个简洁、高效且易于部署的App后端服务器。通过选择合适的编程语言、HTTP服务器框架、操作系统和数据库,以及高效的ORM工具,可以为应用程序的开发...
uni-app的跨平台特性解决了技术难题,JFinal的轻量级设计降低了服务器端开发成本,而微信小程序和HBuilderX的流行度则确保了操作可行性。 2.2 系统功能需求分析 主要功能包括用户注册登录、商品浏览、佣金报备、...
其次,J2EE(Java Platform, Enterprise Edition)是一种用于构建企业级Web应用的技术,本文中可能用于后端服务器处理,如用户数据管理、题目同步等功能。然后,MySQL是一个流行的关系型数据库管理系统,用于存储...
- **J2EE**:Java企业版,用于构建后端服务器,处理用户请求,存储和管理数据。 - **MYSQL**:关系型数据库管理系统,用于存储用户数据和试题信息,支持高效的数据查询和管理。 - 开发过程中可能还会用到Git进行...
小结中,文章会强调新闻网站后台管理系统对于新闻行业的价值,以及本研究在解决现有问题上的贡献,为后续的开发实践提供理论依据和技术支持。 通过以上分析,我们可以看出,新闻网站后台管理系统的设计与实现涉及多...
【小程序云开发初探(小结)】 云开发是微信平台推出的一项创新功能,它为开发者提供了一站式的后端解决方案,包括服务器、数据库和资源存储。这项服务旨在简化小程序的开发流程,让开发者能够更加专注于前端用户体验...
### 小结 本实战视频课程旨在为初学者提供一套完整的学习路径,涵盖 Laravel 框架的基础知识、核心组件使用以及高级特性等内容。通过理论讲解与实际案例相结合的方式,帮助学员快速掌握 Laravel 的核心技能,并能够...
总之,Node.js是一个强大的平台,它简化了Web开发,尤其是后端开发的过程。通过上述的知识点,新手开发者可以开始他们的Node.js学习之旅,逐步深入掌握这一技术。随着学习的深入,开发者可以逐渐接触到更多高级主题...
使用pm2部署安装pm2npm install -g pm2启动应用pm2 start app.js总结流动图书馆小程序是由三个人的小团队设计和开发的。我主要负责前后端的开发工作。这对从来没接触过服务端和小程序开发的我来说是一个挑战...
在开发环境中,`proxyTable` 可以将本地发出的请求转发到指定的服务器,从而规避同源策略。在 `config/index.js` 文件中找到 `proxyTable` 字段,配置如下: ```javascript module.exports = { dev: { // ... ...
输入:节点 app.js 您的服务器启动并侦听端口 3000 您应该可以访问 开始编辑 打开集成指南 route/index.js(后端,请求令牌并请求支付状态) views/checkout.jade (frontend, 整合COPYandPAY checkout) 2.每...
#### 小结 通过本文对BIEE中库变量和介绍变量的详细介绍,我们可以看到这两种类型的变量在实际应用中的重要作用。库变量主要用于后端数据处理和配置,而介绍变量则侧重于前端的用户交互体验。合理利用这些变量不仅...
### 五、部署步骤小结 1. **拉取代码**: - 使用Git命令从指定仓库拉取Nginx项目代码和前端主服务代码。 2. **配置Nginx**: - 将拉取到的Nginx项目代码部署到指定目录。 - 设置Nginx代理配置,确保能够正确...
小结 本文介绍了如何使用React、ajax和java实现上传图片并预览功能。这种功能可以应用于许多Web应用程序中,例如社交媒体平台、电子商务平台等。通过使用React、ajax和java,我们可以实现上传图片并预览功能,提高...
在React JS开发中,集成支付网关是提升用户体验的关键步骤之一。`react-razorpay-button`是一个专门针对React应用的库,它提供了一个简洁、高效的Razorpay快速结账按钮,使得用户能够轻松地进行在线支付。Razorpay是...