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
Оставить комментарий