オーラベースのロゴ
オーラベースドキュメント
ドキュメント›Edge Functions›Invoke a function

関数を呼び出す

デプロイされた関数を JavaScript SDK または HTTP 経由で呼び出す方法と、関数が誰を呼び出しているかをどのように認識するか。

8 分 読み取り·レベル 中間·2026/10/12 に改訂
この英語のテキストはフランス語のオリジナルから自動的に生成されたもので、まだレビューされていません。
このページは自動翻訳されました。英語版が正式です。
#
SDK

1. SDKからの呼び出し

invoke は、公開キーが実行できる唯一の呼び出しです。ブラウザでもサーバーでも同様に機能します。

src/lib/call.tstypescript
import { createClient } from '@aurabase/aurabase-js'

const aura = createClient(process.env.AURA_URL!, process.env.AURA_ANON_KEY!)

const { data, error } = await aura.functions.invoke<{ greeting: string }>('hello', {
  body: { name: 'Ada' },
})
if (error) throw error
console.log(data?.greeting)
src/lib/call-as-user.tstypescript
// サインイン後、SDK はユーザーの JWT をすべての呼び出しに追加します。追加のコードは必要ありません。
await aura.auth.signInWithPassword({ email, password })
const { data } = await aura.functions.invoke('whoami')
// この関数は、x-aura-role:authenticated とユーザーの ID を参照します。

汎用の 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. リクエストの説明

関数は、ラッパーではなく、記述したリクエストを 正確に 受け取ります。

オプションデフォルト関数が認識するもの
methodPOSTreq.method
path/new URL(req.url).pathname
headersなしreq.headers(以下にリストされているプラットフォーム ヘッダーを除く)
bodyなしawait req.json() (文字列の場合は req.text())
timeoutクライアントのデフォルト (30 秒)表示されない: 通話をキャンセルします
signalなし表示されない: 通話をキャンセルします
responseType'json'表示されません: SDK が応答をデコードする方法については、非 JSON 応答を参照してください。
request.tstypescript
await aura.functions.invoke('items', {
  method: 'PUT',
  path: '/items/1',
  headers: { 'x-source': 'dashboard' },
  body: { qty: 2 },
})
aurabase/functions/items/index.tstypescript
Deno.serve(async (req) => {
  const url = new URL(req.url)          // パス名: '/items/1'
  const source = req.headers.get('x-source') // 「ダッシュボード」
  const body = await req.json()         // { 数量: 2 }
  return Response.json({ method: req.method, id: url.pathname.split('/').pop(), source, body })
})

知っておく価値のあるルール:

  • 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-roleanon、 authenticated または service_role
x-aura-user-idx-aura-role が authenticatedの場合はユーザーの ID。それ以外の場合は存在しません。
x-aura-project-idプロジェクトID
authorizationユーザーの JWT、サインインしているユーザーのみ
apikey通話に使用するキー
aurabase/functions/whoami/index.tstypescript
Deno.serve((req) => {
  if (req.headers.get('x-aura-role') !== 'authenticated') {
    return new Response('Sign in first', { status: 401 })
  }
  return Response.json({ userId: req.headers.get('x-aura-user-id') })
})

3 つの異なるキーを使用したこの呼び出しの実際の結果:

results.jsonjson
{ "role": "anon",          "userId": null }
{ "role": "authenticated", "userId": "b125f8cd-ddc8-4042-9d9d-2e0aa3cebe51" }
{ "role": "service_role",  "userId": null }
呼び出し元はこれらのヘッダーを偽造できません

プラットフォームは、呼び出し元が headersに配置した authorization、 apikey、 x-request-id 、およびすべての x-aura-* ヘッダーを、ケースに関係なく破棄します。それ自体が検証した値のみが関数に到達します。他のカスタム ヘッダーは変更されずに通過します。

関数内にリクエストIDがありません

呼び出しの x-request-id は関数に転送されません。呼び出しをログ行に関連付けるには、独自の ID を生成し、headers で送信し、関数に記録します。

#
HTTP

4. HTTP 経由で通話する

SDK を使用しない場合は、リクエストを説明する JSON オブジェクトを送信します。 body フィールドは関数が受け取るものです。

terminalbash
curl -X POST "$AURA_URL/v1/functions/hello/invoke" \
  -H "apikey: $AURA_ANON_KEY" \
  -H "Content-Type: application/json" \
  -d '{"body":{"name":"Ada"}}'

apikey と Content-Type: application/json の両方が必要です。サインインしているユーザーとして呼び出すための Authorization: Bearer <user JWT> を追加します。デフォルトの応答はエンベロープです。 X-Aurabase-Invoke-Mode: raw ヘッダーは代わりに関数独自の応答を返します。 非 JSON 応答を参照してください。

#
結果

5. 結果を読む

invoke はスローされません。 { data, error }が返されます。

result.tstypescript
const { data, error } = await aura.functions.invoke('hello', { body: { name: 'Ada' } })

if (error) {
  // error.status: 失敗のHTTPステータス
  // error.message: 関数が返したテキスト、またはプラットフォームの説明
  return
}
// 関数がコンテンツを返さなかった場合、データは null になります (例: 204)。
if (data === null) return
console.log(data)

値が必要な場合は、 error ではなく data をテストします。 TypeScript では、それが nullではないことがわかります。失敗を正確に処理するには、 エラー、タイムアウト、および再試行を参照してください。