インターセプター入門
Goaインターセプターの作成と使用方法を学ぶ
Goaインターセプターは、サービスメソッドに横断的関心事を注入するための強力な型安全な メカニズムを提供します。完全な型安全性と優れたIDE対応を備え、クライアントとサーバーの 両側でリクエストとレスポンスの両方を傍受して変更することができます。
インターセプターは、サービスメソッドの前、後、または周囲で実行される振る舞いを追加できる コンポーネントです。以下のことが可能です:
以下は、クライアント側のリトライインターセプターを定義する簡単な例です:
var RetryPolicy = Interceptor("RetryPolicy", func() {
Description("失敗した操作に対して指数バックオフリトライを実装します")
// リザルトでリトライ試行回数を追跡
WriteResult(func() {
Attribute("attempts")
})
})
var _ = Service("payment", func() {
// すべてのサービスメソッドにリトライポリシーを適用
ClientInterceptor(RetryPolicy)
Method("process", func() {
Payload(func() {
Attribute("amount", Int, "支払い金額")
Attribute("currency", String, "支払い通貨")
})
Result(func() {
Attribute("id", String, "トランザクションID")
Attribute("status", String, "トランザクションステータス")
Attribute("attempts", Int, "リトライ試行回数")
})
// メソッド固有の設定...
})
})
この例では、失敗した操作に対して指数バックオフを実装するRetryPolicy
インターセプターを
定義しています。主要なコンポーネントを見てみましょう:
インターセプターの定義:
var RetryPolicy = Interceptor("RetryPolicy", func() {
“RetryPolicy"という名前の新しいインターセプターを作成します。
リザルトの変更:
WriteResult(func() {
Attribute("attempts")
})
インターセプターは、必要だったリトライ回数を追跡するために、レスポンスの"attempts” フィールドに書き込むことを宣言します。
サービスへの適用:
ClientInterceptor(RetryPolicy)
インターセプターはサービスレベルで適用され、サービス内のすべてのメソッドに影響を与えます。
メソッドの定義:
process
メソッドは、インターセプターがサービスとどのように統合されるかを示しています:
attempts
フィールドにより、リトライインターセプターがその活動を報告可能実装されると、このインターセプターは失敗した操作を試行間隔を増やしながら自動的に リトライし、一時的な障害に対する回復力を提供します。
インターセプターは、サービスアーキテクチャにおける以下のような一般的なユースケースに 最適です:
認証と認可などのセキュリティ関連の懸念事項については、より堅牢で専門的なセキュリティ機能を 提供するGoaの組み込みセキュリティDSLを使用すべきことに注意してください。