10 月 23 - 25 日,QCon 上海站即将召开,现在购票,享9折优惠 了解详情
写点什么

移动开发者的后端开发入门体验

  • 2020-03-15
  • 本文字数:3852 字

    阅读完需:约 13 分钟

移动开发者的后端开发入门体验

大多数公司移动开发的现状

目前大多数公司移动开发过程中都会多多少少遇到下面的这几种场景:

场景 A(格式)

  • 移动端:老哥,要开发了,需要把接口给我。

  • 后端:这个之前有给 PC 的接口,你直接调 Dubbo 接口吧,你用那个字段就取哪个字段好了

  • 移动端:???这么多字段哪个是我要的,为什么成功的时候这个字段返回的是个 json 对象、失败的时候返回了个字符串。

场景 B (效率)

  • 移动端:各位大佬,App 这边这次项目中有个功能,需要用到订单、商品和物流的信息,这个接口我应该找谁要?

  • 订单大佬:我这边只能给你订单的,其他的业务不该我去处理 商品大佬:我也是跟订单一样的。


移动端:这接口没人接了。。。


  • 产品:。。。我去跟各个 TL 确认下,这接口归属哪边来开发。

场景 C (在线问题解决)

  • 客满同学:线上 App 报错了,弹出了个错误提示


若干分钟后。。。


  • 移动端:经过排查是 xxx 接口返回了错误信息,所以弹出了对应提示,功能不可用,接口责任人在订单同学那边,需要订单同学查下。


若干分钟后。。。


  • 订单同学:这个接口是个聚合接口,不只有订单的信息,看了下是调用 xxx 接口报错了,需要 sss 同学帮忙看下。


若干分钟后。。。


  • sss 同学:排查完毕,是今天发布导致的,已经回滚了,目前线上问题已修复此时已经过去了好几个若干分钟。


相信每个移动端开发的小伙伴都或多或少的遇到过以上几种场景。

为什么移动端要对后端开发有所了解

  1. 作为移动端开发的小伙伴们平时要对接的开发侧的小伙伴,大多数时间段内都是后端开发的同学,了解后端开发的相关知识,可以有利于双方之间的沟通,大大减少双方沟通过程中“大眼瞪小眼”的尴尬场景,这也就是上面所说的场景 A。

  2. 虽然现在 Android 官方推荐使用 Kotlin 语言作为 Android 的开发语言,但是绝大多数 Android 的开发者都是使用 java 开发 Android 入的坑,学习后端开发的时候开发语言上不需要重新学习一遍。

  3. App 端作为直接面向用户的端,接口里的内容往往不是仅仅由一个提供方提供的,例如订单列表的接口中既会有订单相关的信息,也会有购买方的用户信息,还会有所购买的商品的信息,而在实际场景中,用户、订单、商品往往是由不同的部门负责的,这样的话给 app 端提供的接口的维护归属就有了分歧,任何一个改动都需要通知各方协调(场景 B),当有线上问题出现时查询问题原因也需要大家共同去查,会浪费很多人力(场景 C),如果各方只提供自己相关的数据,由 app 端自己去组合数据提供给 app 端,那么责任划分和查询问题就会轻松得多。

  4. 移动端开发也会需要自己的一些基础设施,如自动化构建的维护、跨平台内容的下发、热修复的管理这些都需要有自己的平台去完成,而开发这些平台最适合的莫过于我们这些移动开发人员,因为我们是使用方,更了解这些平台需要替我们完成什么样的功能。

如何入门

首先是选择学习的方向,选择一个合适的框架

对于 java 后端的开发而言,不论是各种书籍还是网上的博客,基本都是在 SSH 和 SSM 两种组合开发框架中做选择。


  • SSH:Struts2 做控制器(controller) + Spring 管理组件 + Hibernate 负责数据库。

  • SSM: SpringMVC 做控制器(controller) + Spring 管理组件 + MyBatis 负责数据库。


SSH 是比较早的项目使用的框架,在各类书籍里经常会见到,目前大多数公司使用的是 SSM,Struts2 之前多次爆出了漏洞而且迭代速度并没有 SpringMVC 那么快,对于 Hibernate 与 Mybatis 的话各有优劣,打个比方的话, Hibernate 更像一个可以拎包入住的装修好的房子,功能完善,但是难以进行优化和扩展,MyBatis 像是毛胚房,需要开发人员自己装修(写 sql 和维护映射),但是得益于此扩展和优化相对自由度较高,建议选择 SSM 好了,毕竟用的人多,遇到问题也容易找到解决方案。如果你对 Spring 繁琐的配置过程感到很头疼的话,建议使用 SpringBoot 来进行开发,因为它集齐了各类常用的开发框架,同时降低了 Spring 开发的门槛,更是简化了各种配置过程。

简单的后端开发用到了哪些知识

相信每个最初接触后端开发的小伙伴都会跟我一样对后端复杂技术生态一脸懵逼,因为一上来就会接触到很多陌生的词汇,像 Spring 的 IOC 和 DI、负责数据库操作的 Mybatis、缓存方面的 Redis 等,甚至连该怎么创建都不清楚。这些。。。。。都是正常的,毕竟没什么人样样精通。对于后端项目开发的学习,以我自身的经历来讲可以这样进行:


  1. 首先是搭建后端项目的框架,当然每个公司都会有自己的模板工程,部署完之后就可以跑起来,如果没有模版工程的小伙伴可以到https://start.spring.io/ 或者使用 idea 自动创建一个工程


  2. start.spring.io 自动生成工程只需要在这个页面上选择对应的条件就好了,之后把生成的工程导入 Idea 就可以开发了。

  3. 工程可以跑起来之后就可以写提供给客户端的接口了,在这部分你需要学习创建 Controller、Service、log 日志的输出以及 maven 的依赖管理,学习这些看官方文档应该是最快的方案,https://docs.spring.io/spring-boot/docs/2.1.5.RELEASE/reference/htmlsingle/ 官方文档写的很详细,所以没必要单独为 spring 买一本书去学习,因为书肯定不如官网的文档更新的快,如果觉得英文不太方便的话,国内也是有中文翻译的文档版本的,可以参照https://love2.io/@funkkiid/doc/Spring-Boot-Reference-Guide/README.md 来学习。

  4. 相信经过上面的两部分你已经知道如何给客户端提供接口了,但是光是这些是不够的,因为给客户端需要的数据往往来自各个服务提供方,例如上面举的订单的例子。这里就需要我们从其他后端应用的服务获取数据,目前国内大多数公司使用阿里开源的 Dubbo 框架来对外提供服务,所以在这里我们还需要学习 Dubbo 的使用,由于 Dubbo 框架是中国公司开源的,所以[文档] https://dubbo.apache.org/zh-cn/ 有中文版,学习起来会比较方便。

  5. 如果单纯是调用别人的服务来整合数据的话,上面三部分学习知识已经可以满足你的要求了。如果有涉及到 App 独立的数据需要持久化存储的话,还需要学习 Mysql 相关的知识以及 Mybatis 的使用。

  6. 随着后端工程业务逐渐复杂,你可能还需要学习更多的内容来完成自己的需求:

  7. 缓存方面:redis

  8. 权限方面:shiro、spring security

  9. 代理服务:Nginx

  10. 消息:ActiveMQ

  11. 数据库连接池:druid

  12. 定时任务:Quartz

  13. 爬虫:WebMagic


其实这些都是可选的,用到的时候再去学习就 ok 了。

有赞移动后端基础设施所做的工作

对于有赞移动端的基础设施的工作我们主要做了以下的内容:


  1. App 网关,虽然项目名称是网关,但是跟后端通常所指的网关不相同,这是一个专门给 App 这边提供接口的应用,开始所说的三种场景的问题,这里都能够很好的解决,因为后端同学大多说是不了解 app 开发的,更多的小伙伴给 App 提供接口的时候会按照给前端网页提供接口的方法给接口,这种场景下 App 这边调用起来就会比较麻烦,在 App 网关中 App 端的小伙伴自己给 app 端提供接口,由 App 端自行维护这个应用,这样的话中台的小伙伴只需要提供自己那部分基础服务就好了,完全不需要考虑提供出去接口的格式和接口归属的划分,同时出现线上问题 App 端的小伙伴也可以直接定位到是哪个服务出现了问题,可以减少线上故障的时间。App 网关结构如下图所示:


  2. 在服务化的过程中前段同学也使用 node 做过类似的处理,感兴趣的同学可以移步 Node 在有赞的实践,只不过不同点在于:App 网关里有一部分 app 端自有的业务逻,没有页面渲染的功能。

  3. ==MBD==,由于业务线比较多,大家都在自己机器上打包的话比较耗时间,也没办法对安装包的构建过程做统一的管理,所以开发了 MBD 来进行正式包、测试包和热修复以及二方库构建的管理。==Apub==,用于 app 应用新版本和热修复的下发和灰度,同时与 MBD 打通,可以实现从构建到发布、热修复、交付一系列流程的打通。

  4. Weex 构建平台 ,类似于 MBD 的功能,对应的场景非原生发版,而是 weex 发版,使得开发人员可以更关注于业务本身,便捷的在不同环境全量、灰度发布 weex 页面。

  5. 配置中心,随着 App 功能的迭代,App 端的配置日益增多:各种功能的开关、参数的配置、网页 url 的地址……

  6. 对配置动态化的期望值也越来越高:配置修改后实时生效,灰度发布,分环境,同时对于运营人员而言,也不希望每次修改信息都由开发人员帮忙修改代码发布。

  7. 在这样的场景,传统的通过移动端或者后端代码中 hardcode 发版、修改数据库等方式已经越来越无法满足开发人员和运营人员对配置管理的需求。于是我们开发了移动配置中心来满足这些需求。

  8. 配置中心中可以对不同的功能划分不同的组件,给运营人员和开发人员发布新配置的功能,新的配置可以通过有赞 IM 的长连接和 App 前后台切换去主动拉取配置,达到实时生效,经过数个版本的迭代,还接入了移动基础保障发布权限的审批、Apub 的灰度发布功能。

  9. 移动基础保障平台,用于移动端管理平台上的权限管理和审批、app 端应用日志的捞取和用户设备信息的查询、以及 app 内应用反馈的处理,配置中心基础功能见下图:


感受 &收获

  1. 客户端的开发更加注重的是用户的体验,是用户操作时的具体感受,面向的是单个用户,而服务端开发更注重的是功能和数据,是线上功能的可用性及数据的准确性。

  2. 虽然客户端和后端都会考虑应用的性能,但是两者侧重点不同,客户端更看重用户使用的感知,如动画效果及滑动流畅性,而后端更看重的是运行效率和并发能力。

  3. 客户端在开发的过程中并发的场景比较少,切换线程一类的操作比较多,而服务端刚好相反,服务端场景下用户并发的场景会很多,线程切换类的操作倒是不如客户端那么频繁了,这与系统的限制及面对的场景相关,客户端只面对一个用户和服务端,而服务端需要面对多个用户。


2020-03-15 20:19816

评论

发布
暂无评论
发现更多内容

解析中美数字货币竞争战略 | 构建属于“人类命运共同体”的货币体系

CECBC

数字货币 人民币

流媒体云时代的声与色,融云铺就的桥与路

脑极体

手抖了

shengjk1

随笔杂谈

别让非理性思维毁了你的人生

看山

随笔杂谈 非理性 认知偏差 自控术

每个大火的“线上狼人杀”平台,都离不开这个新功能

ZEGO即构

游戏 RTC 社交

关于微服务架构的一些思考

俊俊哥

微服务

DSN 主流项目调研 3——Orbit数据库的故事

AIbot

区块链 分布式存储 IPFS 分布式文件 Orbit

流量明星翻车的“直播卖房”,为什么众盟做成了?

脑极体

Kafka和RocketMQ底层存储之那些你不知道的事

yes

kafka RocketMQ 零拷贝 Mmap

DSN 主流项目调研 2——Sia和SAFE Network

AIbot

区块链 分布式存储 分布式文件存储 Sia SAFENetwork

JAVA位运算

彭阿三

Java 位运算

低/零代码会让程序员失业吗?

代码制造者

程序员 低代码 零代码 信息化 编程开发

网站域名备案怎么做?有哪些快速备案的方法?

姜奋斗

网站 备案 网站搭建 域名解析 网站平台

熬得住,人生路

shengjk1

随笔杂谈

害怕

shengjk1

随笔杂谈

你可能不知道的iPython使用技巧

wangkx

Python

我国开启“逆袭战”,区块链的盛夏来了?

CECBC

云计算 区块链技术

奋斗在一线大城市的年轻人的生活工作实录(工厂蓝领篇)

Learun

程序员 软件开发 故事 企业信息化 短片小说

《深度工作》学习笔记(完)

石云升

读书笔记 时间管理 专注 深度工作

易观CTO郭炜:如何构建企业级大数据Ad-hoc查询引擎

易观大数据

普通工程师简史

郭华

Cobra 命令自动补全指北

郭旭东

cobra Go 语言

LeetCode题解:88. 合并两个有序数组,for循环合并数组+sort排序,JavaScript,详细注释

Lee Chen

大前端 LeetCode

一文搞懂Flink rocksdb中的数据恢复

shengjk1

大数据 flink源码

美丑平等

shengjk1

随笔杂谈

浅析Python中的列表和元组

wangkx

Python python升级

SpringBoot系列(二):如何灵活使用SpringBoot

xcbeyond

Java 微服务 springboot

Django查看操作数据库的执行命令

BigYoung

数据库 django 操作

SpringBoot系列(三):SpringBoot特性_SpringApplication类(自定义Banner)

xcbeyond

Java 微服务 springboot Banner

数据平台、大数据平台、数据中台……你确定能分得清吗?

华为云开发者联盟

大数据 数据中台 开发者 数据湖 数据

你看脸吗?

shengjk1

随笔杂谈

移动开发者的后端开发入门体验_文化 & 方法_时文涛_InfoQ精选文章