@ defjs/ core (中文(简体) )
设计可重用HTTP,SSE,和WebSocket API作为数据,然后用应用程序拥有的客户端执行.
def 表示 define. SDK 作者输出操作定义和数据合同. 消耗的应用程序提供终点、证书、拦截器和运输。 导入定义时不会启动请求, 也不会约束客户端 .
安装
bun add @defjs/core
该软件包是无害环境管理,并宣布不依赖运行时间。 申报指标 ES2022 与 ESNext.Disposable, (中文(简体) ), DOM,以及 DOM.Iterable;这些条目只提供类型,而不是多填充。 Defjs是1.0前,所以使用文档来获取您安装的确切版本.
快开始
// users-sdk.ts — SDK definition
import { defineRequest, struct } from "@defjs/core";
export const getUser = defineRequest({
method: "GET",
path: "/users/:id",
input: struct.object({ id: struct.number() }),
builder: (input) => ({ path: input }),
output: struct.object({ id: struct.number(), name: struct.string() }),
error: struct.object({ message: struct.string() }),
});
// app.ts — application-owned client
import { createClient, withEndpoint } from "@defjs/core";
import { getUser } from "./users-sdk.ts";
const client = createClient(withEndpoint("https://api.example.com"));
async function main() {
const [error, user] = await getUser(client, { id: 1 });
if (error) {
console.error(String(error), error.code);
return;
}
console.log(user.name);
}
void main();
通话 getUser(client, { id: 1 }) 验证、构建和发送请求. client({ signal }) 返回 a Client 一次呼叫的值而不执行 I/O。在读取成功值之前返回 error 已经设定。 发布后,导入 getUser 从您的 SDK 软件包中取出, 而不是本地文件 —— 见 构建并发布 SDK。 。 。 .
规则
- 用客户端调用操作执行 I/O. 定义不能抓取客户端 。 没有全球客户端.
- 7个选择
RequestOptions字段 :signal, (中文(简体) ),onUploadProgress, (中文(简体) ),onDownloadProgress, (中文(简体) ),beforeConnect, (中文(简体) ),protocols, (中文(简体) ),heartbeat,以及reconnect。 。 。 .client(options)返回不可调用的客户端值,将这些字段复制到新对象; 设置为undefined被删除。 嵌入heartbeat, (中文(简体) ),protocols,以及reconnect数值通过参考来保存,因此,在通过这些数值后,将其视为不可改变。 过AbortSignal.timeout(ms)作为signal当一个电话需要一个最后期限。 这是因为NET_TIMEOUT; 手动中止NET_ABORTED。投球手从client(options)而不是作为一个错误。 SSE和WebSocket没有只启动的最后期限:信号中止了整个连接. input宣告参数; 同步、 纯度builder把它们放在path, (中文(简体) ),query, (中文(简体) ),headers,以及body。每个定义input需要明确builder。 。 。 .- Structs 运行时验证 .
output是2xx的身体,error每一个其它状态;略去一面,身体永远不读. - 失败作为
Fault错误的第一个二进制中的情况 -HTTP_STATUS, (中文(简体) ),REQ_*, (中文(简体) ),NET_*, (中文(简体) ),RES_*, (中文(简体) ),EXT_*, (中文(简体) ),CAP_*, (中文(简体) ),ENV_UNSUPPORTED。 。 。 .String(error)发出消息;error.code和因子链的结构为日志. - 超时或取消不能证明服务器错过了写入 。 在重放出作文前,保留应用程序一能合同.
- 返回的SSE和 WebSocket 手柄是
AsyncDisposable; 网页closed是逻辑终端结果. - 输入一个与获取兼容的函数
withHTTPHandle(...)测试一个没有服务器的客户端——见 用手柄进行测试。 。 。 .
文档
许可证
麻省理工学院.