コンセプト
非公式ベータ版翻訳
このページは PageTurner AI で翻訳されました(ベータ版)。プロジェクト公式の承認はありません。 エラーを見つけましたか? 問題を報告 →
RPCとは?どのような考え方を持つべきか?
単なる関数呼び出し
RPCは「Remote Procedure Call(リモートプロシージャコール)」の略称です。あるコンピュータ(サーバー)上の関数を別のコンピュータ(クライアント)から呼び出す手法を指します。従来のHTTP/REST APIではURLを呼び出してレスポンスを受け取りますが、RPCでは関数を直接呼び出して結果を得ます。
ts// HTTP/RESTconst res = await fetch('/api/users/1');const user = await res.json();// RPCconst user = await api.users.getById({ id: 1 });
ts// HTTP/RESTconst res = await fetch('/api/users/1');const user = await res.json();// RPCconst 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エコシステムで頻繁に使用される用語を紹介します。ドキュメント全体でこれらの用語を使用しますので、慣れておくことをお勧めします。これらの概念のほとんどには、ドキュメント内で個別の解説ページが用意されています。
| Term | Description |
|---|---|
| Procedure ↗ | API endpoint - can be a query, mutation, or subscription. |
| Query | A procedure that gets some data. |
| Mutation | A 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?" |