干货 | Api 体系架构分享(上)

最近呢,在做 api 的设计

对于设计,一方面是对于后端 server 框架的设计,另一方面呢,是对于整个 api 体系的设计

在这里呢,我们来理理思路,先来大致分一下块

风格就不用说了,我们就用 restful 风格,接下来:

  • IDL,也就是我们所说的接口描述语言
  • server 框架,整个 api 服务的核心驱动
  • 版本控制
  • 还有一些辅助工具,比如说,自动化工具、认证授权、监控上报、日志记录、检索等等

然后呢,我们就来分别说说设计开发中的一些感触

Api 设计

IDL

顾名思义,IDL 是我们整个 api 体系的核心模型,基本上所有的东西都是要基于我们的 IDL 的,在使用的选择上有很多,比如 YamlJsonxmlPB 等等,这些都可以作为接口描述语言,同时呢,各有优劣,在这里呢,我们考虑了以下这几种:

JsonJson 是一种稳定并得到广泛应用的序列化格式,浏览器包含对该格式的原生解析能力,浏览器内建调试器也能很好地显示这种内容。唯一不足在于要具备 Json 解析器/序列器,好在基本所有语言都已提供。使用 Json 最主要的麻烦在于每条信息会重复包含属性名,导致传输效率低下,同时呢,Json 对于一些 api 开发过程中可能出现的特殊需求可能会处理不好,比如说,字段之间的依赖关系,就不容易描述出来

Yaml:使用 Yaml 来定义我们的 api 模型的话,可谓是非常的简洁明了,但是对于 api 模型中的一些复杂结构,以及一些字段的自检测,并不能够很好的支持,同时,这个格式也不容易在开发中进行约定,可能会引起一些不必要的麻烦

PB:PB 全称是 Protocol Buffers,是谷歌创建的一种基于二进制连接格式的接口描述语言。在解析和网络传输方面 Protocol Buffers 更高效,并经历了谷歌高负荷环境的考验,不足在于一些语言的支持并不是很好,主要还是对于 C、python 和 java 的支持,并且呢,在 .proto 文件的共享和编译方面会产生些许额外开发负担

xml:这个大家就都非常熟悉了,相对于 JsonYamlxml 就显得有些笨重了,但是 xml 能够很好的应用于各种特殊的场景,能够根据不断的线上需求进一步的扩展,并且可以直接通过 xsd 进行自校验,从功能上来讲,或许会更加完善一些

因为 IDL 是我们 api 的核心,以后的各项业务基本都要围绕 IDL 展开,所以需要能够功能完善,便于扩展,并且在开发中能够有一些自动化的工具来进行约束,so,最终呢,还是决定采用 xml 的形式

server 框架

核心代码非常的简单,只需要写一个 route 来实现路由调用就行了,但是,为了辅助他能够正常的调用,我们就不得不实现更多的一些辅助功能了

可以来看一下我的基本的目录结构

Framework
    │
    ├── Auth        认证、鉴权模块
    │
    ├── Base        基础服务
    │
    ├── Client      各种端服务
    │
    ├── Common      公共组件
    │
    ├── Core        核心调度逻辑
    │
    ├── Coroutine   协程调度实现
    │
    ├── Exception   异常处理
    │
    ├── Http        协议实现
    │
    ├── Log         日志上报,监控模块
    │
    ├── Pool        连接池(资源池)
    │
    └── Resource    资源模型

同时呢,开发过程中要降低各模块间依赖关系,就比如说,与其 new 一个对象,不如采用 set 的方式来解耦,预期继承,不如采用组合的方式,保证各个模块的独立性,同时呢各模块间又要有一个通讯通道

为了实现一些特殊的需求,我们采用协程调度来实现非阻塞 IO,当然,这里我们就需要实现一个单独的服务端口监听,就好比 swoole 或是 workerman 那样,编写独立的服务进程

ok,上面也提到了,核心代码只需要实现一个 route 路由就行了,但是在路由前后,要记得留出认证、鉴权接口,同时呢,对于运行时的异常也要及时捕获上报,同时记入日志,方便调试

对了,除了这些 server 服务依赖,数据也要注意哦,最好是能够在原始数据之上再单独抽离出来一层数据接口层,不要直接操作原始数据

这些核心服务完成后,剩下的就是客户端和服务端代码,这个就可以根据实际的服务去自由发挥了,对于 api,我们也可以把客户端代码称之为 SDK,同时呢,为了方便以后的开发维护,可以统一编写自动化工具生成,对于不同语言对应的做支持


OK 了,上篇就先写到这里吧,主要说了对于 server 框架以及 IDL 的设计选择思路

下篇呢,会主要对于 api 的版本控制,发布,以及一些自动化工具进行一些分享

From: 一名热爱动漫的攻城狮

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,658评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,482评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,213评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,395评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,487评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,523评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,525评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,300评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,753评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,048评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,223评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,905评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,541评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,168评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,417评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,094评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,088评论 2 352

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,646评论 18 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,979评论 25 707
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 46,797评论 6 342
  • 文|赵晓璃 写在前面的话: 几天前,一篇《醒醒吧,月入3000的年轻人,你已经没救了》的推文在朋友圈疯传。 文中堆...
    赵晓璃阅读 1,948评论 6 54
  • 你是我的遗憾 是风,是梦 如风般温柔 吹过生命里的荒野 低低掠过 所到之处麦草拔节 待到这里再不荒芜 便直直离去 ...
    遗落在秋风中的一抹残叶阅读 175评论 0 2