Firebase 데이터베이스 REST API

API 사용량

모든 Firebase 실시간 데이터베이스 URL을 REST 엔드포인트로 사용할 수 있습니다. 필요한 모든 기능 URL 끝에 .json를 추가하고 원하는 HTTPS 클라이언트에서 이를 가져올 수 있습니다

HTTPS는 필수 항목입니다. Firebase는 암호화된 트래픽에만 응답하므로 데이터가 안전하게 유지됩니다.

GET - 데이터 읽기

HTTP를 실행하여 Realtime Database의 데이터를 읽을 수 있습니다. 엔드포인트에 대한 GET 요청 다음 예를 참고하세요. 사용자 인증 정보를 가져오는 방법을 보여 줍니다. 이전에 Realtime Database에 저장한 이름입니다.

curl 'https://[PROJECT_ID].firebaseio.com/users/jack/name.json'
드림 <ph type="x-smartling-placeholder">

성공적인 요청은 200 OK HTTP 상태 코드로 표시됩니다. 응답에는 GET 요청에서 경로를 찾을 수 없습니다.

{ "first": "Jack", "last": "Sparrow" }

PUT - 데이터 쓰기

PUT 요청으로 데이터를 쓸 수 있습니다.

curl -X PUT -d '{ "first": "Jack", "last": "Sparrow" }' \
  'https://[PROJECT_ID].firebaseio.com/users/jack/name.json'

성공적인 요청은 200 OK HTTP 상태 코드로 표시됩니다. 응답에는 PUT 요청

{ "first": "Jack", "last": "Sparrow" }

POST - 데이터 푸시

JavaScript push()와 동일한 기능을 실행합니다. (데이터 목록 참조) POST 요청을 발행할 수 있습니다.

curl -X POST -d '{"user_id" : "jack", "text" : "Ahoy!"}' \
  'https://[PROJECT_ID].firebaseio.com/message_list.json'

성공적인 요청은 200 OK HTTP 상태로 표시됩니다. 있습니다. 응답에 새 데이터의 하위 이름이 포함됨 POST 요청에서 지정됩니다.

{ "name": "-INOQPH-aV_psbk3ZXEX" }

PATCH - 데이터 업데이트

덮어쓰지 않고 위치에서 특정 하위 항목을 업데이트할 수 있습니다. 기존 데이터에 PATCH 요청을 사용합니다. CANNOT TRANSLATE PATCH로 쓰는 데이터를 덮어쓰지만 생략됨 하위 요소는 삭제되지 않습니다. 이는 자바스크립트 update() 함수를 사용하세요.

curl -X PATCH -d '{"last":"Jones"}' \
 'https://[PROJECT_ID].firebaseio.com/users/jack/name/.json'

성공적인 요청은 200 OK HTTP 상태로 표시됩니다. 있습니다. 응답에는 PATCH 요청

{ "last": "Jones" }

DELETE - 데이터 삭제

DELETE 요청을 사용하여 데이터를 삭제할 수 있습니다.

curl -X DELETE \
  'https://[PROJECT_ID].firebaseio.com/users/jack/name/last.json'

성공적인 DELETE 요청은 다음과 같이 표시됩니다. JSON이 포함된 응답이 있는 200 OK HTTP 상태 코드 null입니다.

메서드 재정의

이전 메서드의 경우 POST 요청 및 X-HTTP-Method-Override 요청 헤더입니다.

curl -X POST -H "X-HTTP-Method-Override: DELETE" \
  'https://[PROJECT_ID].firebaseio.com/users/jack/name/last.json'

x-http-method-override 쿼리 매개변수를 사용할 수도 있습니다.

curl -X POST \
  'https://[PROJECT_ID].firebaseio.com/users/jack/name/last.json?x-http-method-override=DELETE'

조건부 요청

SDK 트랜잭션 작업에 상응하는 REST 요청인 조건부 요청은 다음에 따라 데이터를 업데이트합니다. 알 수 있습니다. 워크플로 개요를 확인하고 조건부 요청에 대해 자세히 알아보세요. 데이터 저장에서 REST용 API를 확인하세요.

Firebase ETag

Firebase infoType은 지정된 위치의 현재 데이터에 대한 고유 식별자입니다. 만약 데이터가 해당 위치에서 변경된다는 의미이며, ETag도 변경됩니다. Firebase infoType은 초기 REST 요청의 헤더 (일반적으로 GET이지만 PATCH 이외의 값이 될 수 있습니다.

curl -i 'https://[PROJECT_ID].firebaseio.com/posts/12345/upvotes.json' -H 'X-Firebase-ETag: true'

일치하는 경우

if-match 조건은 업데이트할 데이터에 대한 ETag 값을 지정합니다. 조건을 사용하는 경우 Realtime Database는 쓰기 요청이 데이터베이스에 있는 기존 데이터의 ETag와 일치합니다. 먼저 Firebase 이그레스 요청이 있는 위치에서의 이그레스. 현재 보고 있는 위치를 덮어쓰려면 null이면 null_etag를 사용합니다.

curl -iX PUT -d '11' 'https://[PROJECT_ID].firebaseio.com/posts/12345/upvotes.json' -H 'if-match: [ETAG_VALUE]'

예상 응답 수

다음 표에서는 각 요청 유형에 대한 예상 응답의 개요를 제공합니다. 필요한 메서드를 제공합니다.

요청 유형 'X-Firebase-ETag: true'
와 일치하는 if_match: <matching etag>
infoType이
if_match: <no matching etag>와 일치하지 않음
받기 응답 상태/내용 200: '<data_at_path>' 400: '...지원되지 않음...' 400: '...지원되지 않음...'
추가된 헤더 ETag: <ETag_of_data> 해당 사항 없음 해당 사항 없음
PUT 응답 상태/내용 200: "<put_data>" 200: "<put_data>" 412: '...ETag 불일치...'
추가된 헤더 ETag: <ETag_of_put_data> 해당 사항 없음 ETag: <database_ETag>
POST 응답 상태/내용 200: "<post_data>" 400: '...지원되지 않음...' 400: '...지원되지 않음...'
추가된 헤더 ETag: <ETag_of_post_data> 해당 사항 없음 해당 사항 없음
패치 응답 상태/내용 400: '...지원되지 않음...' 400: '...지원되지 않음...' 400: '...지원되지 않음...'
추가된 헤더 해당 사항 없음 해당 사항 없음 해당 사항 없음
삭제 응답 상태/내용 200: null 200: "<data_after_put>" 412: '...ETag 불일치...'
추가된 헤더 ETag: <ETag_of_null> 해당 사항 없음 ETag: <database_ETag>

쿼리 매개변수

Firebase Database REST API는 다음과 같은 쿼리 매개변수를 허용하며 값:

access_token

모든 요청 유형에서 지원됩니다. 다음을 허용하려면 이 요청을 인증합니다. Firebase Realtime Database Security Rules에 의해 보호되는 데이터에 액세스할 수 없습니다. 자세한 내용은 REST 인증 문서를 참조하세요.

curl 'https://[PROJECT_ID].firebaseio/users/jack/name.json?access_token=CREDENTIAL'

shallow

대규모 언어 모델(LLM)으로 작업하는 데 도움이 되도록 고안된 전체 데이터 세트를 다운로드할 필요가 없습니다 다음으로 설정 true: 반환되는 데이터의 깊이를 제한합니다. 위치 해당 위치의 데이터가 JSON 프리미티브인 경우 (문자열, 숫자 또는 불리언) 형식의 경우 해당 값이 반환됩니다. 만약 JSON 객체인 반면 각 키의 값은 true(으)로 잘립니다.

인수 REST 메서드 설명
얕은 수면 GET 응답의 깊이를 제한합니다.
curl 'https://[PROJECT_ID].firebaseio/.json?shallow=true'

shallow는 다른 쿼리와 함께 사용할 수 없습니다. 매개변수입니다.

print

서버의 응답에 반환된 데이터의 형식을 지정합니다.

인수 REST 메서드 설명
예쁘다 GET, PUT, POST, PATCH, DELETE 데이터를 사람이 읽을 수 있는 형식으로 봅니다.
무음 GET, PUT, POST, PATCH 데이터를 쓸 때 서버의 출력을 억제하는 데 사용됩니다. 결과 응답은 비어 있으며 204 No Content HTTP 상태 코드
curl 'https://[PROJECT_ID].firebaseio.com/users/jack/name.json?print=pretty'
curl -X PUT -d '{ "first": "Jack", "last": "Sparrow" }' \
  'https://[PROJECT_ID].firebaseio.com/users/jack/name.json?print=silent'

콜백

GET에서만 지원됩니다. 웹브라우저에서 REST 호출을 실행하기 위해 JSONP를 사용하여 응답을 JavaScript로 래핑할 수 있습니다. 콜백함수로 전달하세요. callback=를 추가하여 REST API 래핑 반환되는 데이터를 처리합니다.

<script>
  function gotData(data) {
    console.log(data);
  }
</script>
<script src="https://[PROJECT_ID].firebaseio.com/.json?callback=gotData"></script>

형식

export로 설정하면 서버가 있습니다.

인수 REST 메서드 설명
export GET 응답에 우선순위 정보를 포함합니다.
curl 'https://[PROJECT_ID].firebaseio.com/.json?format=export'

다운로드

GET에서만 지원됩니다. 파일을 트리거하려는 경우 웹브라우저에서 데이터를 다운로드하려면 download=을(를) 추가하세요. 이렇게 하면 REST 서비스가 적절한 헤더를 추가하여 브라우저는 데이터를 파일에 저장하는 것을 인지합니다.

curl 'https://[PROJECT_ID].firebaseio/.json?download=myfilename.txt'
드림 <ph type="x-smartling-placeholder">

제한 시간

이 매개변수를 사용하여 서버 측의 읽기 소요 시간을 제한합니다. 읽기 요청이 할당된 시간 내에 완료되지 않을 경우 400 오류가 발생합니다. 이렇게 하면 소량의 데이터 전송이 필요할 때 특히 유용합니다. 잠재적으로 거대한 하위 트리를 가져오기 위해 너무 오래 기다리지 않아야 합니다. 실제값 읽기 시간은 데이터 크기 및 캐싱에 따라 달라질 수 있습니다.

3ms 형식을 사용하여 timeouts를 지정합니다. 3s 또는 3min(숫자 및 단위 포함) 그렇지 않은 경우 지정된 경우 최대 timeout15min입니다. 적용됩니다. timeout가 양수가 아니거나 최댓값을 초과하면 요청이 HTTP 400 오류와 함께 거부됩니다.

쓰기 크기 제한

쓰기 크기를 제한하려면 writeSizeLimit 쿼리 매개변수를 tiny (타겟=1초), small (타겟=10초), medium (목표=30초), large (목표=60초) 실시간 데이터베이스가 각 쓰기 요청 및 취소 크기 추정 대상 시간보다 오래 걸리는 요청을 예약할 수 있습니다

unlimited를 지정하면 예외적으로 큰 쓰기 (최대 256MB 페이로드 사용) 허용되므로 데이터베이스가 요청을 처리하는 동안 후속 요청이 차단될 수 있습니다. 나타냅니다. 서버에 도달한 후에는 쓰기를 취소할 수 없습니다.

curl -X DELETE 'https://docs-examples.firebaseio.com/rest/delete-data.json?writeSizeLimit=medium'

쓰기 작업이 너무 크면 다음과 같은 오류 메시지가 표시됩니다.

Error: WRITE_TOO_BIG: Data to write exceeds the maximum size that can be modified with a single request.

또한 전체 데이터베이스에 defaultWriteSizeLimit를 설정할 수 있습니다. 인스턴스를 만들 수 있습니다 이 한도는 SDK의 요청을 비롯한 모든 요청에 적용됩니다. 새 데이터베이스는 defaultWriteSizeLimitlarge로 설정하여 만듭니다. Firebase CLI를 사용하여 defaultWriteSizeLimittiny로 설정할 수 없습니다.

firebase database:settings:set defaultWriteSizeLimit large
드림 <ph type="x-smartling-placeholder">

orderBy

정렬된 데이터 를 참조하세요.

limitToFirst, limitToLast, startAt, endAt, equalTo

데이터 필터링 자세히 알아보세요.

REST API에서 스트리밍

Firebase REST 엔드포인트는 EventSource / 서버 전송 이벤트 사용할 수 있습니다 Realtime Database의 단일 위치에 변경사항을 스트리밍하려면 다음 안내를 따르세요. 몇 가지 조치를 취해야 합니다.

  • 클라이언트의 Accept 헤더를 "text/event-stream"으로 설정합니다.
  • HTTP 리디렉션, 특히 HTTP 상태 코드 307을 준수합니다.
  • 위치에 읽기 권한이 필요한 경우 다음을 포함해야 합니다. auth 매개변수

이에 대한 응답으로 서버는 명명된 이벤트를 요청된 URL이 변경됩니다. 이러한 메시지의 구조는 EventSource 프로토콜

event: event name
data: JSON encoded data payload

서버는 다음과 같은 이벤트를 전송할 수 있습니다.

put

JSON 인코딩된 데이터는 path라는 두 개의 키가 있는 객체입니다. 및 데이터. path 키는 상대적 위치를 반환합니다. 클라이언트는 data를 사용하여 캐시의 해당 위치에 있는 데이터를 처리합니다.

patch

JSON 인코딩된 데이터는 path라는 두 개의 키가 있는 객체입니다. 및 데이터. path 키는 상대적 위치를 반환합니다. 각 키의 데이터가 있는 경우 클라이언트는 메시지에 있는 해당 키의 데이터와 함께 캐시의 해당 키를 반환합니다.

keep-alive

이 이벤트의 데이터는 null입니다. 별도의 조치가 필요하지 않습니다.

취소

일부 예기치 않은 오류로 인해 `cancel` 이벤트를 전송하고 연결이 종료될 수 있습니다. 원인은 이 이벤트에 대해 제공된 데이터에 설명되어 있습니다. 몇 가지 잠재적 원인은 다음과 같습니다. 다음과 같습니다. 1. Firebase Realtime Database Security Rules는 더 이상 요청된 위치에서 읽기를 허용하지 않습니다. 이 이 원인에 대한 `data` 설명은 '권한이 거부됨'입니다. 2. 쓰기로 인해 이벤트 스트리머가 트리거되어 한도를 초과하는 큰 JSON 트리를 보냈습니다. 512MB 이 원인의 `data` 는 '지정된 페이로드가 너무 큽니다. 더 적은 데이터로 위치 정보를 검색할 수 있습니다."

auth_revoked

이 이벤트의 데이터는 만료되었습니다. 이 이벤트는 제공된 auth가 매개변수가 더 이상 유효하지 않습니다.

다음은 서버에서 전송할 수 있는 이벤트 세트의 예입니다.

// Set your entire cache to {"a": 1, "b": 2}
event: put
data: {"path": "/", "data": {"a": 1, "b": 2}}

// Put the new data in your cache under the key 'c', so that the complete cache now looks like:
// {"a": 1, "b": 2, "c": {"foo": true, "bar": false}}
event: put
data: {"path": "/c", "data": {"foo": true, "bar": false}}

// For each key in the data, update (or add) the corresponding key in your cache at path /c,
// for a final cache of: {"a": 1, "b": 2, "c": {"foo": 3, "bar": false, "baz": 4}}
event: patch
data: {"path": "/c", "data": {"foo": 3, "baz": 4}}

우선순위

위치의 우선순위 정보는 '가상 아동' 이름: .priority 우선순위를 읽을 때는 GET 요청을 사용하고 PUT 요청으로 이를 작성합니다. 예를 들어 다음 요청은 노드 users/tom개:

curl 'https://[PROJECT_ID].firebaseio/users/tom/.priority.json'

우선순위와 데이터를 동시에 쓰려면 .priority 하위 요소를 JSON 페이로드에 추가합니다.

curl -X PUT -d '{"name": {"first": "Tom"}, ".priority": 1.0}' \
  'https://[PROJECT_ID].firebaseio/users/tom.json'

우선순위와 프리미티브 값 (예: 문자열)을 동시에 쓰려면 .priority 하위 요소를 추가하고 프리미티브 값을 .value 하위 요소에서:

curl -X PUT -d '{".value": "Tom", ".priority": 1.0}' \
  'https://[PROJECT_ID].firebaseio/users/tom/name/first.json'

이렇게 하면 우선순위가 1.0"Tom"가 작성됩니다. 우선순위는 JSON 페이로드에 원하는 깊이에 포함될 수 있습니다.

서버 값

자리표시자 값을 사용하여 위치에 서버 값을 쓸 수 있습니다. 단일 .sv 키가 있는 객체입니다. 이 키의 값은 설정할 서버 값의 유형입니다. 예를 들어 요청은 노드의 값을 Firebase 서버의 현재 타임스탬프:

curl -X PUT -d '{".sv": "timestamp"}' \
  'https://[PROJECT_ID].firebaseio/users/tom/startedAtTime.json'

또한 '가상 아동' 사용할 수 있습니다

지원되는 서버 값은 다음과 같습니다.

서버 값
timestamp UNIX 에포크 이후의 시간(밀리초)입니다.
증분 정수 또는 부동 소수점 델타 값을 다음 형식으로 입력하세요. { ".sv": {"increment": <delta_value> }}: 원자적으로 현재 데이터베이스 값을 증분합니다. 데이터가 아직 없으면 업데이트가 델타 값으로 변경합니다 델타 값 또는 기존 데이터 중 하나가 플로팅인 경우 두 값 모두 부동 소수점 숫자로 해석되어 이중 값으로 사용할 수 있습니다. 이중 산술과 이중 값의 표현은 IEEE 754 의미 체계 양의 정수/음의 정수 오버플로가 있는 경우 합계가 계산됩니다. double로 입력합니다.

Firebase Realtime Database Security Rules 검색 및 업데이트 중

REST API를 사용하여 Firebase Realtime Database Security Rules: 확인할 수 있습니다 Firebase 프로젝트의 비밀번호가 필요하며, GNI의 웹사이트인 <ph type="x-smartling-placeholder"></ph> Firebase 프로젝트의 서비스 계정 패널 설정을 변경합니다.

curl 'https://[PROJECT_ID].firebaseio/.settings/rules.json?auth=FIREBASE_SECRET'
curl -X PUT -d '{ "rules": { ".read": true } }' 'https://[PROJECT_ID].firebaseio/.settings/rules.json?auth=FIREBASE_SECRET'

요청 인증

기본적으로 REST 요청은 인증 없이 실행되며 Realtime Database 규칙은 다음에 대한 공개 읽기 또는 쓰기 액세스를 허용합니다. 데이터를 얻을 수 있습니다. 요청을 인증하려면 access_token= 또는 auth= 쿼리 매개변수

REST API를 통한 인증 자세히 알아보기: REST 요청을 인증합니다.

오류 조건

Firebase Database REST API는 다음과 같은 오류 코드를 반환할 수 있습니다.

HTTP 상태 코드
400 잘못된 요청

다음의 오류 조건 중 하나에 해당됩니다.

  • PUT 또는 POST 데이터를 파싱할 수 없습니다.
  • PUT 또는 POST 데이터가 누락되었습니다.
  • 요청에서 데이터를 PUT 또는 POST하려고 시도합니다. 너무 큰 이미지도 만들 수 있습니다.
  • REST API 호출의 경로에 잘못된 하위 이름이 포함되었습니다.
  • REST API 호출 경로가 너무 깁니다.
  • 요청에 인식할 수 없는 서버 값이 포함되어 있습니다.
  • 쿼리에 대한 색인이 에 정의되어 있지 않습니다. Firebase Realtime Database Security Rules
  • 지정된 쿼리 매개변수 중 하나를 요청에서 지원하지 않습니다.
  • 요청에 쿼리 매개변수와 얕은 GET 요청이 혼용되어 있습니다.
401 승인되지 않음

다음 오류 조건 중 하나에 해당됩니다.

404 찾을 수 없음 지정된 Realtime Database을(를) 찾을 수 없습니다.
500 내부 서버 오류 서버에서 오류를 반환했습니다. 자세한 내용은 오류 메시지를 참고하세요. 확인하세요.
503 서비스를 사용할 수 없음 지정된 Firebase 실시간 데이터베이스를 일시적으로 사용할 수 없습니다. 이는 요청이 시도되지 않았음을 의미합니다
412 전제 조건 실패 if-match 헤더의 요청에 지정된 infoType 값이 서버의 값과 일치하지 않습니다.