【Hasura Docs翻訳】Actions 概要
このコンテンツは以下のHasura公式ドキュメントを翻訳したものです
アクションとは
アクションは、カスタムクエリとミューテーションを使用してカスタムビジネスロジックでHasuraのスキーマを拡張する方法です。アクションをHasuraに追加して、データ検証、外部ソースからのデータエンリッチメント、その他の複雑なビジネスロジックなどのさまざまなユースケースを処理できます。
アクションの説明
アクションは以下の部品から構成されています:
Type
: アクションのタイプ(query
またはmutation
)Definition
: queryやmutationの定義Handler
: queryやmutationが実行された時に走らせる処理Kind
: 同期または非同期が選択できます。queryアクションの場合、Kindはありません。queryアクションは常に同期されます
Type
アクションには2つのタイプがあります:
Query Action
: QueryタイプのアクションはHasuraスキーマのquery rootを拡張します。これは、graphQL queryを通してこのアクションを実行できることを意味します。Queryアクションは、データソースを変更することなくデータソースからデータを取得する際に使用する必要があります。Mutation Action
: MutationタイプのアクションはHasuraスキーマのmutation rootを拡張します。 これは、graphQL mutationを通してこのアクションを実行できることを意味します。Mutationアクションは、データソースの状態を変更したい場合やデータを取得したい場合に使用する必要があります。
Definition
アクションの定義は次のもので構成されています:
Action Name
: アクション名を付与することによってGraphQLスキーマのqueryまたはmutationとして使用されます。Arguments
: 引数は動的な値をqueryやmutationに渡すために使用されます。Response type
: このレスポンスタイプは、queryやmutationが返す値です。アクションは、オブジェクトタイプのみ返すことができます。
例えば、次のアクションを考えてみます:
extend type Mutation { userLogin(username: String!, password: String!): UserInfo }
この定義では、mutation rootをuserLogin
によって拡張しています。
userLogin
はアクション名username
やpassword
はnon-nullableな文字列を許可する引数UserInfo
はアクションのレスポンスタイプ
Custom Types
アクションはオブジェクトタイプを返さなければいけません。これは、あなたがカスタムタイプを定義しなければならないことを意味します。
type UserInfo { accessToken: String! userId: Int! }
Handler
一度アクションタイプを定義すると、アクションが実行された時に走らせる処理を細かく指定しないといけません。アクションハンドラと言われるHTTP webhookで実行できます。
Kind
Mutationアクションには2種類あります:
- 同期: 同期アクションはハンドラーからレスポンスを受け取ったあと、クライアントにレスポンスを返します
- 非同期: 非同期アクションはハンドラーからレスポンスを受け取ったあと、クライアントにレスポンスとして
action id
を返し、クライアントはaction id
を使って実際のレスポンスを購読できます。
Queryアクションはkindを持っていません。常に同期ミューテーションアクションのように動作します。
どのように動くのか
- HasuraはGraphQLクエリまたはミューテーションを受け取り、このリクエストをイベントの付加情報に変換します
- このイベントはキャプチャと永続化されてから、適切な再試行/送信の保証とともにアクションハンドラーに送信されます
- このアクションハンドラーは実行され、イベントとしてキャプチャーされたレスポンスを返却し、再度イベントストアに永続化されます
- このアクションのレスポンスはkindに基づいた同期または非同期的にクライアントに返されます
アクションvsリモートスキーマ
アクションもリモートスキーマもビジネスロジックと共にHasuraを拡張するために使用されます。しかしこれらはユースケースに少し違いがあります。
アクション
アクションはカスタムタイプのためのリゾルバとしてHasuraからRESTエンドポイントを呼び出したい時に使用されます。これらは特に、サーバレス関数をリゾルバーとして設定する際に便利です。
リモートスキーマ
もし、あなたがGraphQL APIを既に持っている場合や自分自身でGraphQLサーバを構築することに抵抗がない場合、リモートスキーマを使用することでカスタムタイプやリゾルバーを追加することができます。