热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

篇首语:本文由编程笔记#小编为大家整理,主要介绍了移动开发者的后端开发入门体验相关的知识,希望对你有一定的参考价值。

篇首语:本文由编程笔记#小编为大家整理,主要介绍了移动开发者的后端开发入门体验相关的知识,希望对你有一定的参考价值。























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


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




场景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自动创建一个工程

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

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



  2. 工程可以跑起来之后就可以写提供给客户端的接口了,在这部分你需要学习创建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 来学习。



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



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



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






  • 缓存方面:redis


  • 权限方面:shiro、spring security


  • 代理服务:nginx


  • 消息:ActiveMQ


  • 数据库连接池:druid


  • 定时任务:Quartz


  • 爬虫:WebMagic


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





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




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





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


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



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



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



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

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

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



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















感受&收获





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


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


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









如果你也对移动技术有自己的想法,欢迎加入有赞电商技术移动组,目前ios开发工程师、Android开发工程师均有岗位,可以投递简历至:fangjun@youzan.com,期待你的加入。






扩展阅读












推荐阅读
  • MySQL的查询执行流程涉及多个关键组件,包括连接器、查询缓存、分析器和优化器。在服务层,连接器负责建立与客户端的连接,查询缓存用于存储和检索常用查询结果,以提高性能。分析器则解析SQL语句,生成语法树,而优化器负责选择最优的查询执行计划。这一流程确保了MySQL能够高效地处理各种复杂的查询请求。 ... [详细]
  • 本文详细介绍了Java代码分层的基本概念和常见分层模式,特别是MVC模式。同时探讨了不同项目需求下的分层策略,帮助读者更好地理解和应用Java分层思想。 ... [详细]
  • 基于iSCSI的SQL Server 2012群集测试(一)SQL群集安装
    一、测试需求介绍与准备公司计划服务器迁移过程计划同时上线SQLServer2012,引入SQLServer2012群集提高高可用性,需要对SQLServ ... [详细]
  • Linux CentOS 7 安装PostgreSQL 9.5.17 (源码编译)
    近日需要将PostgreSQL数据库从Windows中迁移到Linux中,LinuxCentOS7安装PostgreSQL9.5.17安装过程特此记录。安装环境&#x ... [详细]
  • 从0到1搭建大数据平台
    从0到1搭建大数据平台 ... [详细]
  • Framework7:构建跨平台移动应用的高效框架
    Framework7 是一个开源免费的框架,适用于开发混合移动应用(原生与HTML混合)或iOS&Android风格的Web应用。此外,它还可以作为原型开发工具,帮助开发者快速创建应用原型。 ... [详细]
  • 秒建一个后台管理系统?用这5个开源免费的Java项目就够了
    秒建一个后台管理系统?用这5个开源免费的Java项目就够了 ... [详细]
  • 本文详细介绍了 InfluxDB、collectd 和 Grafana 的安装与配置流程。首先,按照启动顺序依次安装并配置 InfluxDB、collectd 和 Grafana。InfluxDB 作为时序数据库,用于存储时间序列数据;collectd 负责数据的采集与传输;Grafana 则用于数据的可视化展示。文中提供了 collectd 的官方文档链接,便于用户参考和进一步了解其配置选项。通过本指南,读者可以轻松搭建一个高效的数据监控系统。 ... [详细]
  • MySQL Decimal 类型的最大值解析及其在数据处理中的应用艺术
    在关系型数据库中,表的设计与SQL语句的编写对性能的影响至关重要,甚至可占到90%以上。本文将重点探讨MySQL中Decimal类型的最大值及其在数据处理中的应用技巧,通过实例分析和优化建议,帮助读者深入理解并掌握这一重要知识点。 ... [详细]
  • 在使用 Cacti 进行监控时,发现已运行的转码机未产生流量,导致 Cacti 监控界面显示该转码机处于宕机状态。进一步检查 Cacti 日志,发现数据库中存在 SQL 查询失败的问题,错误代码为 145。此问题可能是由于数据库表损坏或索引失效所致,建议对相关表进行修复操作以恢复监控功能。 ... [详细]
  • 浅析python实现布隆过滤器及Redis中的缓存穿透原理_python
    本文带你了解了位图的实现,布隆过滤器的原理及Python中的使用,以及布隆过滤器如何应对Redis中的缓存穿透,相信你对布隆过滤 ... [详细]
  • 微信小程序详解:概念、功能与优势
    微信公众平台近期向200位开发者发送了小程序的内测邀请。许多人对微信小程序的概念还不是很清楚。本文将详细介绍微信小程序的定义、功能及其独特优势。 ... [详细]
  • 网站访问全流程解析
    本文详细介绍了从用户在浏览器中输入一个域名(如www.yy.com)到页面完全展示的整个过程,包括DNS解析、TCP连接、请求响应等多个步骤。 ... [详细]
  • 您的数据库配置是否安全?DBSAT工具助您一臂之力!
    本文探讨了Oracle提供的免费工具DBSAT,该工具能够有效协助用户检测和优化数据库配置的安全性。通过全面的分析和报告,DBSAT帮助用户识别潜在的安全漏洞,并提供针对性的改进建议,确保数据库系统的稳定性和安全性。 ... [详细]
  • 基于Net Core 3.0与Web API的前后端分离开发:Vue.js在前端的应用
    本文介绍了如何使用Net Core 3.0和Web API进行前后端分离开发,并重点探讨了Vue.js在前端的应用。后端采用MySQL数据库和EF Core框架进行数据操作,开发环境为Windows 10和Visual Studio 2019,MySQL服务器版本为8.0.16。文章详细描述了API项目的创建过程、启动步骤以及必要的插件安装,为开发者提供了一套完整的开发指南。 ... [详细]
author-avatar
凤凰花开清风自来_406
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有