関数を呼び出す
デプロイされた関数を JavaScript SDK または HTTP 経由で呼び出す方法と、関数が誰を呼び出しているかをどのように認識するか。
1. SDKからの呼び出し
invoke は、公開キーが実行できる唯一の呼び出しです。ブラウザでもサーバーでも同様に機能します。
汎用の invoke<T> は応答を入力するだけです。名前と本体はコンパイル時にチェックされません。
list, get, listJobs, enqueueJob and the other management methods need a service_role key and belong on your server. A public key receives 403. See who can call what.
2. リクエストの説明
関数は、ラッパーではなく、記述したリクエストを 正確に 受け取ります。
| オプション | デフォルト | 関数が認識するもの |
|---|---|---|
method | POST | req.method |
path | / | new URL(req.url).pathname |
headers | なし | req.headers(以下にリストされているプラットフォーム ヘッダーを除く) |
body | なし | await req.json() (文字列の場合は req.text()) |
timeout | クライアントのデフォルト (30 秒) | 表示されない: 通話をキャンセルします |
signal | なし | 表示されない: 通話をキャンセルします |
responseType | 'json' | 表示されません: SDK が応答をデコードする方法については、非 JSON 応答を参照してください。 |
知っておく価値のあるルール:
GETおよびHEADは本文なしで送信されます。- 文字列ではない本文は、設定しない限り、
content-type: application/jsonを含む JSON として送信されます。 文字列 本体はそのまま送信され、content-type: application/jsonも取得されるので、req.text()で読み込んでください。 bodyがない場合、関数は本文のないリクエストを受け取ります。裸のawait req.json()はスローされるため、ペイロードなしで呼び出しを実行できる場合はawait req.json().catch(() => ({}))を記述します。- 本文は JSON (オブジェクト、配列、文字列、数値、またはブール値) である必要があります。
Blob、ArrayBuffer、型付き配列、FormData、URLSearchParamsまたはReadableStreamは、リクエストが送信される前にエラー コードinvalid_bodyで拒否されます。 - フレーミング ヘッダー (
content-length、transfer-encoding、connection、hostなど) は無視されます。
3. 発信者の身元を読み取る
プラットフォームは、関数が実行される前にキーとユーザーのトークンを検証し、次のヘッダーを追加します。
| ヘッダー | 値 |
|---|---|
x-aura-role | anon、 authenticated または service_role |
x-aura-user-id | x-aura-role が authenticatedの場合はユーザーの ID。それ以外の場合は存在しません。 |
x-aura-project-id | プロジェクトID |
authorization | ユーザーの JWT、サインインしているユーザーのみ |
apikey | 通話に使用するキー |
3 つの異なるキーを使用したこの呼び出しの実際の結果:
プラットフォームは、呼び出し元が headersに配置した authorization、 apikey、 x-request-id 、およびすべての x-aura-* ヘッダーを、ケースに関係なく破棄します。それ自体が検証した値のみが関数に到達します。他のカスタム ヘッダーは変更されずに通過します。
呼び出しの x-request-id は関数に転送されません。呼び出しをログ行に関連付けるには、独自の ID を生成し、headers で送信し、関数に記録します。
4. HTTP 経由で通話する
SDK を使用しない場合は、リクエストを説明する JSON オブジェクトを送信します。 body フィールドは関数が受け取るものです。
apikey と Content-Type: application/json の両方が必要です。サインインしているユーザーとして呼び出すための Authorization: Bearer <user JWT> を追加します。デフォルトの応答はエンベロープです。 X-Aurabase-Invoke-Mode: raw ヘッダーは代わりに関数独自の応答を返します。 非 JSON 応答を参照してください。
5. 結果を読む
invoke はスローされません。 { data, error }が返されます。
値が必要な場合は、 error ではなく data をテストします。 TypeScript では、それが nullではないことがわかります。失敗を正確に処理するには、 エラー、タイムアウト、および再試行を参照してください。