HTTP Batch Link

Combine concurrent RPC operations into a single HTTP request.

httpBatchLink is a terminating link that automatically combines multiple independent RPC operations that occur close together into a single HTTP request.

multiple RPC operations

one HTTP request

You still write normal, independent RPC calls. The link collects eligible operations from the same scheduling window and sends them as one batch:

import { createClient, httpBatchLink } from "@pyrpc/client"
import type { Types } from "@pyrpc/types"

export const client = createClient<Types>({
  links: [
    httpBatchLink({
      url: "https://api.example.com",
      maxItems: 10,
    }),
  ],
});

// The three concurrent calls are combined into one HTTP request.
const [alice, bob, carol] = await Promise.all([
  client.get_user({ id: 1 }),
  client.get_user({ id: 2 }),
  client.get_user({ id: 3 }),
]);

How It Works

Operations that occur in the same scheduling window are collected and sent as a single JSON array to the server's /rpc endpoint:

POST /rpc
Content-Type: application/json

[
  {"id":"a1b2c3","method":"get_user","params":{"id":1}},
  {"id":"d4e5f6","method":"get_user","params":{"id":2}}
]

The server responds with an array of results, matched back to the pending calls by index. Each operation keeps its own id and resolves or rejects independently — so one failed procedure never fails the others. The HTTP request succeeding is a transport success; a per-operation error is an operation failure that surfaces as a PyRPCError on that call only. Only a failed HTTP request fails the whole batch.

Batching Semantics

  • Both queries and mutations can be batched. pyRPC uses POST for both, so they can share one batch.
  • Operations inside a batch execute sequentially on the server, in request order.
  • A batch is not a transaction: if one operation fails, the others still execute, and successful operations are not rolled back.
  • Each operation keeps its own result or error. A single failed procedure does not fail the others.

Options

  • url: server URL (required). Give the root (https://api.example.com) or the full endpoint (https://api.example.com/rpc); the link normalizes to /rpc.
  • maxItems: maximum operations per batch; when more operations are queued, they flush immediately rather than waiting for the batching window. Defaults to Infinity.