基本概念
按层级划分
操作系统->编程语言->框架类库->Web API
编程语言是对操作系统的API封装,框架类库是对编程语言API的封装, Web API是对框架类库的封装
按通讯方式划分
RPC | REST API | WebSocket API | |
消息格式 | 二进制Thrift,Protobuf,GRPC | 文本XML,JSON,GraphQL | 二级制,文本json |
通讯协议 | TCP | HTTP,HTTP/2 | HTTP,websocket |
性能 | 高 | 一般 | 一般 |
接口契约IDL | Thrift,Protobuf IDL | Swagger | Swagger |
客户端 | 强类型客户端 | HTTP客户端 | websocket客户端 |
框架 | Dubbo,GPRC,Thrift | web框架 | websocket框架 |
开发者友好 | 一般自动生成存根、客户端、使用友好,二进制消息阅读不友好 | json可读性高,通用性 | json可读性高,通用性 |
应用场景 | 服务间通讯推荐PRC | 对外暴露接口推荐REST | 大文件类的流式数据,语言识别服务 |
按应用场景划分
业务应用
app,小程序,pc站,手机站 等客户端提供 api
开放平台(Open API)
PaaS,SaaS Serverless 平台的服务API
API设计必须要具备的指标
规范和风格
restful api 风格,laravel框架自带
github路由风格,https://api.github.com/
全部小写,多单词时用短划线分隔
http://xxxx/register-phone
不要用下划线,下划线的域名和路由在一些第三方开放平台无法通过验证,如qq互联申请时
鉴权
OAuth2
防止重放攻击
请求限流
按时间限流,req/minute
随机拒绝,如秒杀场景
api(路由)版本管理