メタデータ
メタデータとは何か、どのように送信されるのか、そして何に使用されるのかを説明します。
メタデータ
概要
メタデータは、クライアントとサーバーがRPCに関連付けられた情報を相互に提供できるようにするサイドチャネルです。
gRPCメタデータは、初期または最終的なgRPCリクエストまたはレスポンスと共に送信されるデータのキーと値のペアです。認証資格情報、トレース情報、カスタムヘッダーなど、呼び出しに関する追加情報を提供するために使用されます。
gRPCメタデータは、HTTP/2ヘッダーを使用して実装されます。キーはASCII文字列であり、値はASCII文字列またはバイナリデータのいずれかになります。キーは大文字と小文字を区別せず、gRPC自体用に予約されている接頭辞grpc-
で始めてはなりません。
gRPCメタデータは、クライアントとサーバーの両方で送受信できます。ヘッダーは、クライアントからサーバーへ、最初の要求の前に、またサーバーからクライアントへ、RPC呼び出しの最初の応答の前に送信されます。トレーラーは、サーバーがRPCを閉じるときに送信されます。
gRPCメタデータは、次のようなさまざまな目的で役立ちます。
- 認証:gRPCメタデータを使用して、認証資格情報をサーバーに送信できます。これは、標準のHTTP Authorizationヘッダーを使用して、
OAuth2
やJWT
などのさまざまな認証スキームを実装するために使用できます。 - トレース:gRPCメタデータを使用して、トレース情報をサーバーに送信できます。これは、分散システムにおけるリクエストの進行状況を追跡するために使用できます。
- カスタムヘッダー:gRPCメタデータを使用して、カスタムヘッダーをサーバーに送信したり、サーバーからクライアントに送信したりできます。これは、負荷分散、レート制限、またはサーバーからクライアントへの詳細なエラーメッセージの提供など、アプリケーション固有の機能を実装するために使用できます。
- 内部使用:gRPCはHTTP/2ヘッダーとトレーラーを使用しますが、これらはアプリケーションで指定されたメタデータと統合されます。
コアコンセプトを参照してください。
注意点
WARNING: Servers may limit the size of Request-Headers, with a default of 8 KiB suggested.
カスタムメタデータは、PROTOCOL-HTTP2に記載されている「カスタムメタデータ」形式に従う必要があります。ただし、バイナリヘッダーはbase64でエンコードする必要はありません。
ヘッダー
ヘッダーは、クライアントからサーバーへの最初の要求データメッセージの前に、同様にサーバーからクライアントへの最初の応答データの前に送信されます。ヘッダーには、認証資格情報やRPCの処理方法などが含まれます。認証などの一部のヘッダーは、gRPCによって自動的に生成されます。
カスタムヘッダーの処理は、一般的にインターセプターを通じて、言語に依存します。
トレーラー
トレーラーは、メッセージデータの後に送信される特別な種類のヘッダーです。これらは、RPCの結果を通信するために内部的に使用されます。アプリケーションレベルでは、カスタムトレーラーを使用して、サーバーの利用率やクエリコストなど、データに直接関係のないものを伝達できます。トレーラーはサーバーによってのみ送信されます。
詳細については、以下の gRPC を参照してください。
- 提案:G1 true binary metadata
- 提案:L7 go metadata api
- 提案:L48 node metadata options
- 提案:L42 python metadata flags
- 提案:L11 ruby interceptors
言語サポート
言語 | 例 | 注記 |
---|---|---|
Java | Java Header Java Error Handling | |
Go | Go Metadata Go Metadata Interceptor | Go Documentation |
C++ | C++ Metadata | |
Node | Node Metadata | |
Python | Python Metadata | |
Ruby | 例は近日公開 |