Cloudflare выпустила Cap’n Web — новую RPC-библиотеку на TypeScript, предназначенную для упрощения взаимодействия между браузерными и серверными приложениями. Библиотека весит менее 10 КБ и не имеет зависимостей.
Что такое Cap’n Web
Cap’n Web представляет собой духовного преемника Cap’n Proto, но спроектированного специально для веб-стека. Ключевые особенности:
- Объектно-ориентированная модель возможностей (object-capability)
- Полное отсутствие схем и шаблонного кода
- Интеграция с TypeScript
- Человекочитаемая JSON-сериализация
- Поддержка HTTP, WebSocket и postMessage()
- Работа во всех основных браузерах, Cloudflare Workers и Node.js
Основные возможности
Библиотека реализует объектно-ориентированную RPC-модель, которая предоставляет:
- Двусторонние вызовы (клиент→сервер и сервер→клиент)
- Передачу функций по ссылке
- Передачу объектов по ссылке через наследование от RpcTarget
- Конвейеризацию промисов для цепочек вызовов
- Поддержку паттернов безопасности на основе возможностей
Простота использования
Клиентская часть выглядит крайне просто:
import { newWebSocketRpcSession } from "capnweb";
let api = newWebSocketRpcSession("wss://example.com/api");
let result = await api.hello("World");
console.log(result);
Серверная реализация для Cloudflare Worker:
import { RpcTarget, newWorkersRpcResponse } from "capnweb";
class MyApiServer extends RpcTarget {
hello(name) {
return `Hello, ${name}!`
}
}
export default {
fetch(request, env, ctx) {
let url = new URL(request.url);
if (url.pathname === "/api") {
return newWorkersRpcResponse(request, new MyApiServer());
}
return new Response("Not found", {status: 404});
}
}
HTTP batch mode
Для случаев, когда WebSocket избыточен, доступен HTTP-режим:
import { newHttpBatchRpcSession } from "capnweb";
let batch = newHttpBatchRpcSession("https://example.com/api");
let result = await batch.hello("World");
console.log(result);
Cap’n Web — это тот редкий случай, когда элегантность архитектуры сочетается с практической полезностью. Объектно-ориентированный подход с передачей ссылок — это именно то, чего не хватало веб-разработке для создания сложных распределенных систем. Жаль, что такая библиотека не появилась лет на пять раньше — сколько бы костылей с callback-ами можно было бы избежать!
Библиотека особенно хорошо подходит для интерактивных веб-приложений с функциями реального времени и моделирования взаимодействий через сложные границы безопасности. Хотя проект пока экспериментальный, он демонстрирует зрелый подход к распределенным вычислениям в современном JavaScript-стеке.
По материалам Cloudflare Blog
Оставить комментарий