【Hasura Docs翻訳】Actions 概要

このコンテンツは以下のHasura公式ドキュメントを翻訳したものです

hasura.io

アクションとは

アクションは、カスタムクエリとミューテーションを使用してカスタムビジネスロジックでHasuraのスキーマを拡張する方法です。アクションをHasuraに追加して、データ検証、外部ソースからのデータエンリッチメント、その他の複雑なビジネスロジックなどのさまざまなユースケースを処理できます。

f:id:ropitaru:20200801115931p:plain

アクションの説明

アクションは以下の部品から構成されています:

  1. Type: アクションのタイプ(queryまたはmutation)
  2. Definition: queryやmutationの定義
  3. Handler: queryやmutationが実行された時に走らせる処理
  4. 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はアクション名
  • usernamepasswordはnon-nullableな文字列を許可する引数
  • UserInfoはアクションのレスポンスタイプ

Custom Types

アクションはオブジェクトタイプを返さなければいけません。これは、あなたがカスタムタイプを定義しなければならないことを意味します。

type UserInfo {
  accessToken: String!
  userId: Int!
}

custom typesについて学ぶ

Handler

一度アクションタイプを定義すると、アクションが実行された時に走らせる処理を細かく指定しないといけません。アクションハンドラと言われるHTTP webhookで実行できます。

action handlerの書き方を学ぶについて

Kind

Mutationアクションには2種類あります:

  • 同期: 同期アクションはハンドラーからレスポンスを受け取ったあと、クライアントにレスポンスを返します
  • 非同期: 非同期アクションはハンドラーからレスポンスを受け取ったあと、クライアントにレスポンスとしてaction idを返し、クライアントはaction idを使って実際のレスポンスを購読できます。

Queryアクションはkindを持っていません。常に同期ミューテーションアクションのように動作します。

どのように動くのか

  • HasuraはGraphQLクエリまたはミューテーションを受け取り、このリクエストをイベントの付加情報に変換します
  • このイベントはキャプチャと永続化されてから、適切な再試行/送信の保証とともにアクションハンドラーに送信されます
  • このアクションハンドラーは実行され、イベントとしてキャプチャーされたレスポンスを返却し、再度イベントストアに永続化されます
  • このアクションのレスポンスはkindに基づいた同期または非同期的にクライアントに返されます

アクションvsリモートスキーマ

アクションもリモートスキーマビジネスロジックと共にHasuraを拡張するために使用されます。しかしこれらはユースケースに少し違いがあります。

アクション

アクションはカスタムタイプのためのリゾルバとしてHasuraからRESTエンドポイントを呼び出したい時に使用されます。これらは特に、サーバレス関数をリゾルバーとして設定する際に便利です。

リモートスキーマ

もし、あなたがGraphQL APIを既に持っている場合や自分自身でGraphQLサーバを構築することに抵抗がない場合、リモートスキーマを使用することでカスタムタイプやリゾルバーを追加することができます。