ref : bytebytego.com
1. REpresentation State Transfer 每次请求表示自己的状态
让资源用某种形式表示(json/xml等) (json非二进制传输,解析拉跨,gson才是二进制)
六约束:客户端服务端,统一接口,无状态,缓存(GET√,POST不缓存),分层系统,按需代码。(服务端可以返回js)
(GET-POST-PUT-PATCH-DELETE)
URI: 统一资源标识符。(包含URL网址,也就是定位符)
- URL(统一资源定位符):它不仅标识资源,还提供了找到该资源的方法。URL包含了访问资源所需的详细信息,比如协议(HTTP、FTP等)和网络位置。
- URN(统一资源名称):它仅用来标识资源的名称,而不提供定位信息。URN是一种持久的、位置无关的资源标识符。
- GraphQL 这玩意有人用?!适用于复杂关系数据,强类型数据,客户端数据要求(无需数据关联)
1) Query 读
2) Mutation 写 (变异, 变形/变态)
3) Subscription 事件 (订阅跟进吃瓜)
操作类型 操作名 定义变量
query GetAllTheEggs ($eggId: ID!){
egg (id: $eggId){
name
}
}
// 以上两种都要知道方法,路径,参数,主体格式等具体传输信息
- RPC 【技术机制】
各个微服务,提供facade接口。
1) 服务端响应函数提供功能。function
2) 客户端stub去调。
3) 调RPC库,通过Marshal网络翻译
4. gRPC 框架
Protobuf 压缩,高速, 序列化二进制,易解析, 强无敌
service Eggs{
rpc ChickenEgg(ChickenEggRequest) returns(ChickenEggResponse){}
}
message ChickenEggRequest{
string name = 1;
}
message ChickenEggResponse{
string message = 1;
}
支持流式传输,基于HTTP/2, 有HPACK压缩。(不能用浏览器调用)
- tRPC
全栈开发。乐开花。
前后端就一组库,易用,易维护。没Protubuf
编辑器容易看出客户端发现服务端不存在字段等