メインコンテンツへスキップ
バージョン: 11.x

コンセプト

非公式ベータ版翻訳

このページは PageTurner AI で翻訳されました(ベータ版)。プロジェクト公式の承認はありません。 エラーを見つけましたか? 問題を報告 →

RPCとは?どのような考え方を持つべきか?

単なる関数呼び出し

RPCは「Remote Procedure Call(リモートプロシージャコール)」の略称です。あるコンピュータ(サーバー)上の関数を別のコンピュータ(クライアント)から呼び出す手法を指します。従来のHTTP/REST APIではURLを呼び出してレスポンスを受け取りますが、RPCでは関数を直接呼び出して結果を得ます。

ts
// HTTP/REST
const res = await fetch('/api/users/1');
const user = await res.json();
// RPC
const user = await api.users.getById({ id: 1 });
ts
// HTTP/REST
const res = await fetch('/api/users/1');
const user = await res.json();
// RPC
const user = await api.users.getById({ id: 1 });

tRPC(TypeScript Remote Procedure Call)はTypeScriptモノレポ向けに設計されたRPCの実装の一つです。独自の特徴を持ちつつも、本質的にはRPCの考え方に基づいています。

HTTP/RESTの実装詳細は考えなくてよい

tRPCアプリのネットワークトラフィックを確認すると、標準的なHTTPリクエストとレスポンスが使用されています。しかしアプリケーションコードを書く際には、これらの実装詳細を意識する必要はありません。関数を呼び出すだけで、tRPCが残りの処理をすべて担当します。HTTPメソッドのような詳細は無視して構いません。これらはREST APIでは重要な意味を持ちますが、RPCでは関数名の一部として表現されます。例えばGET /users/:idではなくgetUser(id)のように呼び出します。

用語集

以下にtRPCエコシステムで頻繁に使用される用語を紹介します。ドキュメント全体でこれらの用語を使用しますので、慣れておくことをお勧めします。これらの概念のほとんどには、ドキュメント内で個別の解説ページが用意されています。

TermDescription
Procedure ↗API endpoint - can be a query, mutation, or subscription.
QueryA procedure that gets some data.
MutationA procedure that creates, updates, or deletes some data.
Subscription ↗A procedure that creates a persistent connection and listens to changes.
Router ↗A collection of procedures (and/or other routers) under a shared namespace.
Context ↗Stuff that every procedure can access. Commonly used for things like session state and database connections.
Middleware ↗A function that can run code before and after a procedure. Can modify context.
Validation ↗"Does this input data contain the right stuff?"