ビューと結果型

ビューの計算とマーシャリングを含め、Goaが結果型のビューをどのように扱うかを理解する

結果型ビューの概要

Goaのビューは、レスポンスで結果型がどのようにレンダリングされるかを制御する 強力な方法を提供します。メソッドがビューを持つ結果型を返す場合:

  1. サービスメソッドに追加のビューパラメータが含まれます
  2. サービスレベルで専用のビューパッケージが生成されます
  3. ビュー固有のバリデーションロジックが自動的に生成されます

ビュー計算プロセス

サービスメソッドの生成

メソッドが複数のビューを持つ結果型を返す場合:

  • メソッドのシグネチャには追加のビューパラメータが含まれます
  • 生成されるエンドポイント関数は、このビューを使用してビュー付き結果型を作成します
  • 通常の結果型とビュー付き結果型の間の変換のためのコンストラクタが生成されます

ビューパッケージ

サービスレベルで生成されるビューパッケージには以下が含まれます:

  • 各メソッド結果のビュー付き結果型の定義
  • ビュー固有のバリデーションを可能にするためのポインタを使用するフィールド
  • 通常の結果型とビュー付き結果型の間の変換関数

マーシャリングとトランスポート

サーバーサイドのレスポンス

  1. ビュー付き結果型はサーバー型にマーシャリングされます
  2. nilの属性はレスポンスから省略されます
  3. ビュー名は"Goa-View"ヘッダーで渡されます

クライアントサイドのレスポンス

  1. レスポンスはクライアント型にアンマーシャリングされます
  2. ビュー付き結果型に変換されます
  3. ビュー名は"Goa-View"ヘッダーから抽出されます
  4. ビュー固有のバリデーションが実行されます
  5. ビュー付き結果型はサービス結果型に変換し直されます

デフォルトビューの動作

  • ビューが定義されていない場合、Goaは自動的に"default"ビューを追加します
  • ビュー固有のロジックをバイパスするには、結果型の代わりにType DSLを使用します
  • デフォルトビューには結果型のすべての基本フィールドが含まれます

ベストプラクティス

  • 異なるコンテキストのデータの可視性を制御するためにビューを使用します
  • ビューを設計する際はパフォーマンスへの影響を考慮します
  • API仕様でビューの動作を文書化します
  • 目的を反映した意味のあるビュー名を使用します