Api设计指南

基本概念

应用程序编程接口

按层级划分

操作系统->编程语言->框架类库->Web API

编程语言对操作系统的API封装,框架类库对编程语言API的封装, Web API是对框架类库的封装

按通讯方式划分

RPCREST APIWebSocket API
消息格式二进制Thrift,Protobuf,GRPC文本XML,JSON,GraphQL 二级制,文本json
通讯协议TCPHTTP,HTTP/2HTTP,websocket
性能一般 一般
接口契约IDLThrift,Protobuf IDLSwaggerSwagger
客户端强类型客户端HTTP客户端websocket客户端
框架Dubbo,GPRC,Thriftweb框架websocket框架
开发者友好一般自动生成存根、客户端、使用友好,二进制消息阅读不友好json可读性高,通用性json可读性高,通用性
应用场景服务间通讯推荐PRC对外暴露接口推荐REST大文件类的流式数据,语言识别服务

既然有HTTP协议,为什么还要有RPC

按应用场景划分

业务应用

app,小程序,pc站,手机站 等客户端提供 api

开放平台(Open API)

PaaSSaaS Serverless 平台的服务API

API设计必须要具备的指标

规范和风格

restful api 风格,laravel框架自带

Restful Api 风格规范研究

github路由风格,https://api.github.com/

全部小写,多单词时用短划线分隔

http://xxxx/register-phone

不要用下划线,下划线的域名和路由在一些第三方开放平台无法通过验证,如qq互联申请时

鉴权

OAuth2

Laravel搭建OAuth2.0服务

LaravelSanctum 授权 SPA场景

防止重放攻击

请求限流

浅谈api限流

按时间限流,req/minute

随机拒绝,如秒杀场景

api(路由)版本管理

Laravel路由版本控制的实现。