在app后端的工作中,设计api是一个很考验设计能力的工作。在项目的初始阶段,只知道具体的业务逻辑,那怎么把业务逻辑抽象和提炼,设计出api呢?通过阅读本文,可解答以上疑惑。

在本文中,是用以前做过的app移客ekeo第一版(以后的业务逻辑改了很多)业务逻辑来举例。移客ekeo是一款以熟人社交和真实聚会为核心的社交工具。移客以解决聚会难题为核心,你可以通过移客快速发起或者参与聚会活动,掌握参加者是否已经出发或者到达。

移客ekeo这个app已经停止运营了,如果想要更加了解ekeo的业务逻辑, 可下载app"微聚"来研究一下,这两个app在业务逻辑上是比较相近的。

从业务逻辑到api出炉,分为下面6个阶段:

1.业务逻辑思维导图  

2.功能-业务逻辑导图

3.基本功能模块关系

4.功能模块接口uml(设计出api)

5.在设计稿标注api

6.编写api文档

1.业务逻辑思维导图

整个流程的第一步,就是抽象出业务逻辑。

抽象是什么意思?就是把相同的东西先放在一起,这是抽象的第一步。我们业务流程,就像一条河一样,从头走到脚,里面会有很多一样的东西,我们需要先抽象出来,就好比,一栋楼,就很多三角形,很多圆形,很多正方形,我们先要把这些东西抽象出来。

如果抽象都抽象错了,写接口也没啥用,就是在乱做了。

所以说抽象的第一步,就是我们其实可以通过思维导图的形式把我们相同的业务流程,抽象出来形成一个图表,然后通过关系箭头,表现出来。

1. 我们现在首先是要用思维导图把结构关系列出来,包括里面的功能

2. 我们要把相同的元素整理出来,比如说,都是相同的推送,都是相同的评论,都是图片上传,然后我们用相同的颜色,在1的图上面表明出来。

这样大家至少清楚,我们哪些业务逻辑是一样的,各位亲,这个如果都没搞清楚,你怎么敢确保后面你做的接口是完整的呢?等我们把这一步搞清楚,我们就知道了,一个模块,需要有哪些接口,那个时候,我们再用UML图,把接口和接口关系画出来,那个时候是抽象的第二步。

根据业务逻辑整理出如下的思维导图:

2.功能-业务逻辑导图

这步的核心是"把业务逻辑和功能模块呈现的内容结合"。

功能模块,说简单点,就是支撑业务逻辑的功能模块。就是说,我们现在需要做的,是属于MODULES的这一块。

MVC ,最复杂,其实是M这一块,V 不用说, 很简单,其实就是业务流程,C  也很简单,是功能操作流程,M 怎么分, 如何对应前面的业务流程,很复杂。

“就是把业务逻辑和功能模块呈现的内容结合”什么意思?就是你写了一个MODUELS的名字出来,你要能够把业务逻辑里面的东西,和他关联起来。再说简单点,就是一对多,一就是MODULES,多就是业务逻辑,一个MODULES,对应于多个业务逻辑。

先做最上面的一层,尽可能多的进行一对多的分析,然后按照最小独立原则,看这个1,是不是一个最小的系统,按照GOOGLE的设计思想原理,每一个MODULES,都是一个可以独立运行的模块,也就是说,MODULES和MODULES之间是没关系的。

所以,后面的东西越来越复杂鸟。也就是说,你可能会画出ABCDEF 6个MODULES,对应前面的业务逻辑,但是去掉中间任意一个,比如只有ABCDF了,业务逻辑只是相对减少,而不会完全崩溃,这就是最小独立原则。

在思维导图中,其实是2个部分的结合

1. 业务逻辑

2. 功能模块

我们现在需要划分功能模块,依据3个原则:

1.      功能模块和业务逻辑之间的关系

2.      功能模块和功能模块之间还不能有关系

3.      功能模块还要尽可能的一对多(一个功能模块对应多个业务逻辑)

结合还有另外一层的意思,按照人,事来分, 人其实就是一个大模块, 事,就看里面有哪些事, 相同的事,就是一个模块, 人和事之间又会有关系,哪些是关系模块,

功能-业务逻辑导图如下:

3.基本功能模块关系

关系图内部,把对应关系找出来, 现在要做第3个图, 你看我们的步伐是,从业务—》进入功能, 按照人和事来分:

人,有哪些功能模块?

事,有哪些功能模块?

人和事之间的关系,又有哪些模块?

所有的互联网产品,无非就是人和事, 没有更多的东西了,注意:我们现在还不是在做API哦,我们只是在做功能模块哦,千万不要做到API这个层次上面去了,现在还没有到那一步。

事的划分标准,就是以业务逻辑来划分,但是你站在功能的角度来看,你又要把业务逻辑里面,相同的功能,抽象出来,形成功能模块,这样才能满足一对多啊。

事不能理解成用户的行为哦,事就是单纯的事,商家 就是事,他不是用户的行为哦,人就是指用户,事,就是指事物,人和事之间的关系,叫事件,事件是人和事之间的关系。

你 =  用户 = 人

星巴克 =  商家 = 事

不能主动发出请求的,归属于事,你去星巴克喝咖啡  = 事件= 人和事之间的关系,事是事物,不是事件,我给你发短信,你收到了短信是2个事件。

我是人

短信是事物

我发短信是事件

你是人

短信是事物

你接受短信是事件

这个拆分得不好,后面程序就一塌糊涂。

短信的那个事件很经典的,很多人不会拆的,看起来好简单的,不能主动发出请求的,归属于事。如果商家可以主动发出请求,那就是人,没其他的分法了,如果一个东西,具备主动性,他就人,就是用户。

做出的功能模块关系图如下:

4.功能模块接口uml(设计出api)

现在我们只考虑功能模块,做功能模块的UML图,但是只考虑到api的接口, 就是说,我们要设计哪些接口,去解决哪些问题。

接口是基于现在的模块,粗略的模块。

基于现在的模块设计接口,就是要提高耦合度,确保耦合正确。整理这些业务和功能模块,就是确保耦合正确。

耦合是一个很不好做的东西。耦合度太高,不能拆分。太低,又失去了模块化的意义。我其实是想先让你们自己设计一下,看看对照出来的是什么效果。主要困难,其实就是在耦合度的设计上。

整理出功能模块接口的UML如下:

上面的图就是所整理处理的api,把这些中文变成英文,就是熟悉的api。

5.编写在线api测试文档

我们网站的api在线测试文档,是使用既是一份在线api文档,也是一个在线测试工具,极大方便沟通和测试。每次客户端程序员觉得某个api有什么问题,我们就是这个在线工具上讨论沟通的。客户端程序员最喜欢这个玩意了^-^。

  这个api在线测试文档,是使用了Swagger-UI搭建的。Swagger-UI简单而一目了然。它能够纯碎的基于html+javascript实现,只要稍微整合一下便能成为方便的API在线测试工具。项目的设计架构中一直提倡使用TDD(测试驱动)原则来开发,swagger-ui在这方面更是能提供很大帮助。

  下面是用Swagger-UI搭建的api文档中的一个api的例子,可看到,整个api的提交方式,作用,参数都非常清晰明了。

6.在设计稿标注api

api整理出来后,对于前端的开发人员来说,还有一个比较大的障碍,他们不知道app在哪个地方调用哪些api,为了方便前端人员,需要在设计稿上标注出哪个地方使用哪个api,如下图所示:

---------------------------------------------------------------------------------------------------------------------------

打开链接  app后端系列文章总目录 总目录 ,能查看本人发表过的所有原创“app后端”文章。

【作者】曾健生

【QQ】190678908

【app后端qq群】254659220 

【微信公众号】 appbackend

【新浪微博】 @newjueqi

【博客】http://blog.csdn.net/newjueqi

版权声明:本文为博主原创文章,未经博主允许不得转载。

20.如何从app业务逻辑提炼api接口的更多相关文章

  1. 从App业务逻辑中提炼API接口

    2.1 从App业务逻辑中提炼API接口 业务逻辑思维导图 功能-业务逻辑思维导图 基本功能模块关系 功能模块接口UML(设计出API) 在设计稿标注API 编写API文档 2.2 设计API的要点 ...

  2. 示例浅谈PHP与手机APP开发,即API接口开发

    示例浅谈PHP与手机APP开发,即API接口开发 API(Application Programming Interface,应用程序接口)架构,已经成为目前互联网产品开发中常见的软件架构模式,并且诞 ...

  3. iOS开发---业务逻辑

    iOS开发---业务逻辑   1. 业务逻辑 iOS的app开发的最终目的是要让用户使用, 用户使用app完成自己的事就是业务逻辑, 业务逻辑的是最显眼开发工作.但是业务逻辑对于开发任务来说, 只是露 ...

  4. ASP.NET MVC5 网站开发实践(一) - 框架(续) 模型、数据存储、业务逻辑

    上次搭建好了项目框架,但还是觉得不太对劲,后来才想起来没有对开发目标进行定位,这个小demo虽然不用做需求分析,但是要实现什么效果还得明确.后来想了一下就做个最简单的网站,目标定为小公司进行展示用的网 ...

  5. 【干货】利用MVC5+EF6搭建博客系统(一)EF Code frist、实现泛型数据仓储以及业务逻辑

    习MVC有一段时间了,决定自己写一套Demo了,写完源码再共享. PS:如果图片模糊,鼠标右击复制图片网址,然后在浏览器中打开即可. 一.框架搭建 二.创建数据库 1.创建一个空的EF code fr ...

  6. 从零开始,搭建博客系统MVC5+EF6搭建框架(1),EF Code frist、实现泛型数据仓储以及业务逻辑

    前言      从上篇30岁找份程序员的工作(伪程序员的独白),文章开始,我说过我要用我自学的技术,来搭建一个博客系统,也希望大家给点意见,另外我很感谢博客园的各位朋友们,对我那篇算是自我阶段总结文章 ...

  7. API接口设计

    1.场景描述 比如说我们要做一款APP,需要通过api接口给app提供数据.假设我们是做商城,比如我们卖书的.我们可以想象下这个APP大概有哪些内容: 1)首页:banner区域(可以是一些热门书籍的 ...

  8. 年轻人不讲武德,竟然重构出这么优雅后台 API 接口

    Hello,早上好,我是楼下小黑哥~ 最近偶然间在看到 Spring 官方文档的时候,新学到一个注解 @ControllerAdvice,并且成功使用这个注解重构我们项目的对外 API 接口,去除繁琐 ...

  9. 一场完美的“秒杀”:API加速的业务逻辑

    清晨,我被一个客户电话惊醒,客户异常焦急,寻问CDN能不能帮助他们解决“秒杀”的问题,他们昨天刚刚进行了“整点秒杀活动”,结果并发量过大,导致服务宕机,用户投诉. 为了理清思路,我问了对方三个问题: ...

随机推荐

  1. 采用UltraISO制作U盘启动盘

    采用UltraISO制作U盘启动盘 打开UltralSO,选择"文件"--->"打开",如下图: 图1 打开WIN7操作系统的ISO文件,如下图: 图2 ...

  2. 软件开发顶尖高手的杀手锏SQL语句

                  软件开发顶尖高手的杀手锏SQL语句                                                                     ...

  3. Python 3.7 将引入 dataclass 装饰器

    简评:Python 3.7 将于今年夏天发布,Python 3.7 中将会有许多新东西,最激动人心的新功能之一是 dataclass 装饰器. 什么是 Data Class 大多数 Python 开发 ...

  4. innobackupex 简单使用笔记

    innobackupex 选项介绍 --backup 备份 --apply-log   应用日志 --move-back  --copy-back 恢复 --export 只导出单个表.前提是使用in ...

  5. Linux下编译安装BOOST

    linux平台下要编译安装除gcc和gcc-c++之外,还需要两个开发库:bzip2-devel 和python-devel,因此在安装前应该先保证这两个库已经安装: #yum install gcc ...

  6. ffmpeg 时间戳处理

    视频的显示和存放原理 对于一个电影,帧是这样来显示的:I B B P.现在我们需要在显示B帧之前知道P帧中的信息.因此,帧可能会按照这样的方式来存储:IPBB.这就是为什么我们会有一个解码时间戳和一个 ...

  7. golang 二进制转十进制实现方式

    golang 二进制转十进制实现方式 直接上代码 package main import ( "fmt" "math" ) func StringToIntAr ...

  8. 利用Tess4J实现图片识别

    一.下载 1.进入官网下载页面 https://sourceforge.net/projects/tess4j/ 2.点击download 3.下载后解压,目录如下,圈出的三个文件夹是需要用到的 二. ...

  9. Fiddler抓包使用教程-Android应用抓包

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/74439165 本文出自[赵彦军的博客] Fiddler 也可以支持对手机应用进行 ...

  10. LCA最近公共祖先(倍增版)

    倍增版LCA lac即最近公共祖先,u和v最近公共祖先就是两节点公用的祖先中深度最大的 比如 其中 lca(1,2)=4, lca(2,3)=4, lca(3,5)=1, lca(2,5)=4; 如何 ...