传送门
TSRPC 是一个沉淀近 4 年的 TypeScript RPC 框架,不仅经过了多个千万用户级的项目验证,而且你可以联系到一个活着的讲中文的作者。
介绍
TSRPC是什么
TSRPC 是一个 TypeScript 的 RPC 框架,适用于浏览器 Web 应用、WebSocket 实时应用、NodeJS 微服务等场景。
目前,大多数项目仍在使用传统的 Restful API 进行前后端通信,这存在一些痛点。
1. 依赖文档进行协议定义,前后端联调常被低级错误困扰(如字段名大小写错误,字段类型错误等)。
2. 一些框架虽然实现了协议定义规范,但需要引入
Decorator
或第三方 IDL 语言。
3. 一些框架虽然实现了类型校验,但无法支持 TypeScript 的高级类型,例如业务中常见的
Union Type
:
export type ReqLogin = {
type: 'password',
password: string
} | {
type: 'wechat',
code: string
}
4. JSON 支持的类型有限,例如不支持
ArrayBuffer
,实现文件上传会非常麻烦。
5. 请求和响应都是明文,破解门槛太低,字符串加密方式有限且强度不够。
6. 等等…
我们无法找到一个能完美解决这些问题的现成框架,于是我们全新设计和创造了
TSRPC
。
概览
一个名为
Hello
的协议,从定义、实现到浏览器调用。
协议定义
export interface ReqHello {
name: string;
}
export interface ResHello {
reply: string;
}
服务端实现
export async function ApiHello(call: ApiCall<ReqHello, ResHello>) {
call.succ({
reply: 'Hello, ' + call.req.name
});
}
客户端调用
let ret = await client.callApi('Hello', {
name: 'World'
});
console.log(ret); // { isSucc: true, res: { reply: 'Hello, World' } }
全程代码提示
参数类型检测(编译时刻 + 运行时刻)
特性
TSRPC 具有一些前所未有的强大特性,给您带来极致的开发体验。
-
原汁原味 TypeScript
-
直接基于 TypeScript
type
和
interface
定义协议 - 无需额外注释,无需 Decorator,无需第三方 IDL 语言
-
直接基于 TypeScript
-
自动类型检查
- 在编译时刻和运行时刻,自动进行输入输出的类型检查
- 总是类型安全,放心编写业务代码
-
二进制序列化
- 比 JSON 更小的传输体积
-
比 JSON 更多的数据类型:如
Date
,
ArrayBuffer
,
Uint8Array
等 - 方便地实现二进制加密
-
史上最强大的 TypeScript 序列化算法
- 无需任何注解,直接实现将 TypeScript 源码中的类型定义序列化
- 首个也是目前唯一支持 TypeScript 高级类型的二进制序列化算法,包括:
-
Union Type
-
Intersection Type
-
Pick Type
-
Partial Type
-
Indexed Access Types
- 等等
-
☎
多协议
- 同时支持 HTTP / WebSocket
-
多平台
- NodeJS / 浏览器 / App / 小程序
-
⚡️
高性能
- 单核单进程 5000+ QPS 吞吐量(测试于 Macbook Air M1, 2020)
- 单元测试、压力测试、DevOps 方案齐备
- 经过数个千万用户级项目验证
兼容性
完全可以在 Server 端使用 TSRPC,同时兼容传统前端。
-
兼容 JSON 形式的 Restful API 调用
-
可自行使用
XMLHttpRequest
、
fetch
或其它 AJAX 框架以 JSON 方式调用接口 -
兼容纯 JavaScript 的项目使用
- 可在纯 JavaScript 项目中使用 TSRPC Client,也能享受类型检查和序列化特性
-
兼容 Internet Explorer 10 浏览器
- 浏览器端兼容至 IE 10 ,Chrome 30
开始学习
虽然有诸多新鲜、令人激动的强大特性, 但就像你能在
Github
上看到的那样,TSRPC 其实是一个已经开源超过 4 年的成熟框架。虽然一直没写文档,也没怎么推广,但我们已经使用它开发了若干个百万级DAU、千万级用户的项目,累计覆盖超过1亿+线上用户。
对于这份文档的迟到感到抱歉,希望能对你的工作有所帮助。