아우라베이스 로고
아우라베이스문서
문서›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') })
})

세 가지 다른 키를 사용한 이 호출의 실제 결과는 다음과 같습니다.

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
}
// 함수가 콘텐츠를 반환하지 않은 경우(예: 204) 데이터는 null입니다.
if (data === null) return
console.log(data)

값이 필요할 때 error 대신 data를 테스트합니다. TypeScript는 값이 null이 아니라는 것을 알 수 있습니다. 오류를 정확하게 처리하려면 오류, 시간 초과 및 재시도를 읽어보세요.

마지막 업데이트 · 2026. 10. 12.