🌊
Amplify CLI API(GraphQL)/Custom business logic
lambda関数リゾルバー
- @functionディレクティブを使用するとGraphQLAPIを使用してAWS Lamdbaリゾルバーを迅速かつ簡単に設定できます。
- (例)amplify add functionでlambda関数を追加する。
exports.handler = async function(event, context){
return event.arguments.msg;
};
- aws lambdaリゾルバーをGraphQLAPIに接続するには@functionをスキーマのフィールドに追加する。
type Query {
echo(msg: String): String @function(name: "echofunction-${env}")
}
関数の構造
Head | Head |
---|---|
typeName | オブジェクトの名前 |
fieldName | フィールド名 |
arguments | 引数 |
identity | 特定するマップ |
source | 実行時の親の値 |
request | リクエストオブジェクト。ヘッダー含む |
prev | 前の関数によって返されたオブジェクト |
関数の連鎖
- 複数のリゾルバーが連続して呼び出されるように設定できる。
- 以下では最初にworker関数が呼び出され、次にevent.prev.resultキーの下にワーカー関数の結果を含むイベントを持つaudit関数が起動します。
type Mutation {
doSomeWork(msg: String): String @function(name: "worker-function") @function(name: "audit-function")
}
- ディレクティブの定義@function
directive @function(name: String!, region: String) on FIELD_DEFINITION
- 必要に応じて次のリソースを生成する。
- 関数を呼び出す権限と、AWS AppSync の信頼ポリシーを持つ AWS IAM ロール。
- 新しいロールと既存の関数を AppSync API に登録する AWS AppSync データ ソース。
- ラムダ イベントを準備し、新しいデータ ソースを呼び出す AWS AppSync パイプライン関数。
- GraphQL フィールドにアタッチし、新しいパイプライン関数を呼び出す AWS AppSync リゾルバー。
HTTPリゾルバー
- @httpディレクティブを用いることでGraphQL API内でHTTPリゾルバーを素早く構成できる。
type Post {
id: ID!
title: String
description: String
views: Int
}
type Query {
listPosts: [Post] @http(url: "https://www.example.com/posts")
}
- amplifyはlistPostsクエリが使用されるときにURLにリクエストを装輪する以下の定義を生成する。
type Query {
listPosts: [Post]
}
リクエストヘッダー
- @httpディレクティブはXMLおよび、JSON応答を処理できるリゾルバーを生成する。メソッドが定義されていない場合はGETが使用される。静的ヘッダーのリストを指定できる。
type Query {
listPosts: [Post]
@http(
url: "https://www.example.com/posts"
headers: [{ key: "X-Header", value: "X-Header-Value" }]
)
}
パスパラメータ
- URLにパラメータを指定することで、動的パスを生成できる。
type Query {
getPost: Post @http(url: "https://www.example.com/posts/:id")
}
- 上記の:idでは下に示すように適切なquery inputを生成する
type Query {
getPost(params: QueryGetPostParamsInput!): Post
}
input QueryGetPostParamsInput {
id: String!
}
- idを用いてfetchできる
query post {
getPost(params: {id: "POST_ID"}) {
id
title
}
}
Discussion