分钟丨教你玩转 API
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~
背景
当下,业界越来越多公司在项目架构设计时,会采用微服务架构。微服务架构,可以让我们的产品有更好的扩展性,更好的伸缩性;但同时也会带来微服务的一系列问题,比如微服务接口怎样规范管理?怎样在多团队协作中开放与复用?等等。
同时,业界也在逐渐的引入DevOps理念,来实现开发,测试,运维,运营更紧密的高效配合,提升产品迭代的效率,质量。
这里,织云API平台将从“部门内微服务API开放复用”,“产品线API DevOps实践”来分享腾讯社交网络运营部踩过的坑和API平台在“开放”,“DevOps”的理解及实践。
1API开放与复用
部门长期运营,积累了很多优秀的系统/平台,各个系统/平台也很早的开放了自己的Open API 给其它团队做二次开发和使用。
作为开放接口使用方:要集成A平台的B服务时,你可能会遇到:
- 找不到平台开放接口文档;
- 从平台官网下载的接口文档好像未更新;
- 接口文档定义太简单。看不懂;
- 使用前,不清楚接口的质量现状(成功率,耗时等);
- 出异常时,没法快速界定问题的边界。
作为开放接口提供方:你在运营上可能会遇到:
- 接入方很多,长久下来,自己都不清楚调用方是哪些?
- 最近我的接口调用量大增,不清楚这些调用是否合理?
- 旧接口要下线,但仍有请求。不方便快速找到调用者。
2产品线API那些事儿
织云,是腾讯SNG海量业务运维能力经验沉淀出的产品,它采用微服务架构。在微服务的开发,测试,交付,运营中,我们遇到这样子的问题:
- web工程师:版本迭代很紧,但是后台同学的接口迟迟出不来,我的工作delay很久了
- 后台工程师:版本迭代很紧,写代码的时间都没有。哪来时间写用例。但每次修改代码,人工自测耗费很多时间。
- 两位工程师:上次不是好说接口长xx样子吗?怎样现在变成这样子了?
- 质量工程师:这个迭代,织云性能是否达标呢?看不见,摸不着,快慢主要凭感觉。
- 运维工程师:客户反馈操作有异常。一个问题都转几手开发。我怎样快速定位问题根源
- 客户:你们的XX能力很好。我们想基于它们接口做二次开发。有开放接口吗
织云API平台,就是这种大背景下应运而生。
API平台简介
- 定义
织云API平台,是一个以API服务管理和代理以基础,赋能接口开发,测试,上线运营,下线管理于一体的API管理与开放平台。
- 应用场景
- 功能介绍
1、织云API平台,实现了API统一规范管理与开放。 2、以服务代理为基础,实现了安全认证,过载保护。 3、对于服务调用支持日志查询,数据画像,异常告警,链路分析等功能。 4、可以基于API平台实现基于织云所有能力的定制开发的能力。
接口规范和接入成本
- 接口规范
屏蔽接口URI层级差异:
API平台,统一采用三级结构,通过/平台/服务/接口的层次来管理所有接入API,屏蔽实际接口URI的层级差异;
屏蔽接口响应结构差异:
API平台,自动转换接口响应结构,屏蔽实际接口的结构差异化。大大简化了集成开发,特别是Web前端同学适配后台接口的复杂度。
全局业务错误码:
确保服务间的每个错误码都是唯一能溯源的。
- 接入成本--零改造
API平台在设计之前就考虑到用户接入的成本。以上规范,API平台都能自动屏蔽差异,自动转换,自动生成。用户接入零改造。
注册API服务 — 示例
- 现成的API接口
现在我有一个容量的分析接口:查询模块容量持续高低负载数据接口。
url: http://capacity/load/sustained-load method: get 入参:type=1&m1id=468095&m2id=468095&m3id=468095&m4id=468095 出参: [ { "m1id": 1256, "m2id": 1256010, "day_cnt": 14, "m4id": 468095, "avg_load": 0.25, "type": 1, "model_cnt": 1, "m3id": 11120 } ]
- 创建接口对应的平台,服务
操作相似。如创建服务:
其中的英文缩写,将是最终API url中对应的服务名。
- 注册接口 - 基础信息
- 注册接口 - 定义请求示例
自动生成入出参:
在入参,出参示例部分,只须贴入:
入参:type=1&m1id=468095&m2id=468095&m3id=468095&m4id=468095, 出参: [ { "m1id": 1256, "m2id": 1256010, "day_cnt": 14, "m4id": 468095, "avg_load": 0.25, "type": 1, "model_cnt": 1, "m3id": 11120 } ]
API平台会自动帮我们解析结构(当前支持key/value, json结构等解析)
用户,只须录入字段是否必填,以及中文说明即可。
- 注册接口 - 定义接口返回码
接口开放
- 查看开放API接口
列表页:
在API平台注册接口后,可以在API平台列表中查询每个开放接口:
明细面:
在明细面,可以查看接口详情。以及自动生成的调用示例。