Docs Menu
Docs Home
/ /
Atlas App Services
/

데이터 API 엔드포인트 [사용 중단됨]

이 페이지의 내용

  • Data API를 사용해야 하는 경우
  • 기본 URL
  • 데이터 API 설정하기
  • 인증
  • 권한 부여
  • 응답 유형
  • 액세스 권한
  • API 버전
  • 데이터 API 엔드포인트 호출
  • API 버전 선택
  • 요청 데이터 형식 지정
  • 응답 데이터 형식 선택하기
  • 요청 인증
  • 요청 승인

데이터 API는 표준 HTTPS 요청을 사용해 데이터를 안전하게 읽고 쓸 수 있도록 합니다. API에는 MongoDB 작업을 각각 나타내는 자동으로 생성된 엔드포인트가 포함되어 있습니다. 이 엔드포인트를 사용해 MongoDB 데이터 소스에서 문서를 생성하고, 읽고, 업데이트하고, 삭제하고, 집계할 수 있습니다.

예를 예시, 이 POST 요청 은 엔드포인트를 호출하여 연결된 클러스터 에 문서 를 저장합니다.insertOne

curl -s "https://data.mongodb-api.com/app/myapp-abcde/endpoint/data/v1/action/insertOne" \
-X POST \
-H "Content-Type: application/ejson" \
-H "Accept: application/json" \
-H "apiKey: TpqAKQgvhZE4r6AOzpVydJ9a3tB1BLMrgDzLlBLbihKNDzSJWTAHMVbsMoIOpnM6" \
-d '{
"dataSource": "mongodb-atlas",
"database": "learn-data-api",
"collection": "hello",
"document": {
"text": "Hello, world!"
}
}'
{ "insertedId": "5f1a785e1536b6e6992fd588" }

사용 가능한 모든 엔드포인트에 대한 자세한 API 참고는 데이터 API OpenAPI 참조를 참조하세요.

참고

데이터 API를 사용하여 HTTPS 요청을 지원하는 앱 또는 서비스와 통합할 수 있습니다. 그 예로 다음과 같은 작업을 수행할 수 있습니다.

  • 모바일 애플리케이션에서 Atlas 쿼리하기

  • CI/CD 워크플로의 테스트 데이터 및 로그 이벤트에 액세스

  • Atlas를 연합 API 게이트웨이에 통합합니다.

  • 현재 MongoDB 드라이버나 Realm SDK를 통해 지원되지 않는 환경에서 연결

API 엔드포인트를 통해 작업을 호출할 때는 연결된 MongoDB 드라이버를 통해 동일한 MongoDB 작업을 호출할 때보다 시간이 오래 걸릴 수 있습니다. 부하가 높은 사용 사례나 지연 시간에 민감한 애플리케이션의 경우, MongoDB 드라이버를 사용해 데이터베이스에 직접 연결하는 것을 권장합니다. 자세한 내용은 MongoDB 드라이버 문서를 참조하세요.

앱의 데이터 API 엔드포인트는 기본 URL을 공유합니다. URL은 앱 ID를 사용하여 앱을 고유하게 가리키고 호출할 데이터 API 버전을 지정합니다. 각 엔드포인트에는 앱의 기본 URL에 엔드포인트의 경로를 추가하여 구성된 고유한 URL이 있습니다.

전역에 배포된 앱은 다음 형식을 사용합니다.

엔드포인트 기본 URL(글로벌 앱):
https://data.mongodb-api.com/app/<App ID>/endpoint/data/<API Version>

로컬로 배포된 앱의 엔드포인트에서는 해당 앱의 배포서버 리전에 특정된 기본 URL을 사용합니다(예: us-east-1.aws).

엔드포인트 기본 URL(로컬 앱)
https://<Region>.<Cloud>.data.mongodb-api.com/app/<App ID>/endpoint/data/<API Version>

App Services UI에서, 혹은 App Services CLI로 구성 파일을 배포하여 원하는 앱의 데이터 API를 구성할 수 있습니다.

  1. 왼쪽 탐색 메뉴에서 HTTPS Endpoints 을 클릭한 다음 Data API 탭 을 선택합니다.

  2. 앱에 데이터 API를 활성화합니다. 이렇게 하면 앱에 연결된 모든 MongoDB 데이터 소스에 액세스할 수 있는 엔드포인트가 생성됩니다.

  3. 인증 방법을 선택하고 인증 제공자를 활성화합니다.

  4. 응답 유형을선택합니다.

  5. 데이터 API 구성을 저장합니다.

  6. 연결된 데이터 소스에서 collection에 대한 규칙을 정의하여 액세스 권한을 구성하여 요청이 데이터를 안전하게 읽고 쓸 수 있도록 허용합니다.

  7. 앱을 저장하고 배포합니다.

  1. 최신 버전의 앱 을 가져옵니다.

    appservices pull --remote="<Your App ID>"
  2. 데이터 API 구성 파일 을 정의합니다.

    https_endpoints/data_api_config.json
    {
    "disabled": false,
    "versions": ["v1"],
    "can_evaluate": {},
    "return_type": <"JSON" | "EJSON">
    }
  3. 앱 을 배포합니다.

    appservices push

데이터 API 엔드포인트는 특정 사용자의 컨텍스트에서 실행되며, 이를 통해 앱이 각 요청에 대해 규칙을 시행하고 문서 스키마의 유효성을 검사할 수 있습니다.

기본적으로 엔드포인트는 API 키 또는 JWT와 같은 애플리케이션 사용자 중 한 명의 자격 증명을 각 요청에 포함하도록 요구하는 애플리케이션 인증을 사용합니다. 또한 애플리케이션의 요구 사항에 맞게 다른 사용자 지정 인증 체계를 구성할 수도 있습니다.

요청을 인증하는 방법의 예는 데이터 API 요청 인증을 참조하세요.

애플리케이션 인증을 위해서는 사용자가 앱에 대해 허용한 인증 제공자를 통해 로그인해야 합니다. 요청에는 인증 제공자가 부여한 액세스 토큰이나 사용자가 로그인하는 데 사용하는 자격 증명이 포함될 수 있습니다(예: API 키 또는 이메일과 비밀번호).

사용자 ID 인증 은 모든 요청을 미리 선택된 단일 애플리케이션 사용자로 실행합니다. 이는 누가 엔드포인트를 호출했는지에 관계없이 모든 요청에 동일한 권한이 있어야 하는 경우에 유용합니다.

사용자를 선택하려면 앱의 데이터 API 구성에서 해당 사용자의 사용자 계정 ID를 지정합니다.

http_endpoints/data_api_config.json
{
"run_as_user_id": "628e47baf4c2ac2796fc8a91"
}

스크립트 인증 은 함수를 호출하여 요청 이 실행되는 애플리케이션 사용자를 결정합니다. 이를 사용하여 사용자 지정 인증 및 권한 부여 체계를 구현 수 있습니다.

및 애그리게이션 API에 대한 전체 액세스 이 있고 규칙, 역할 또는 권한의 영향을 받지 않는 ID string { "runAsSystem": true } 시스템 사용자 로 요청 을 실행 하려면 함수가 기존 애플리케이션 사용자의 계정 를 또는 로 반환해야 합니다.MongoDB CRUD

함수를 정의하려면 앱의 데이터 API 구성에서 소스 코드를 지정합니다.

http_endpoints/data_api_config.json
[
{
...,
"run_as_user_id_script_source": "exports = () => {return \"628e47baf4c2ac2796fc8a91\"}"
}
]

각 요청에서 인증된 사용자에게 추가적인 권한 부여 정보를 제공하도록 요구할 수 있습니다. 데이터 API 구성에서 생성된 모든 데이터 API 엔드포인트에 대한 권한 부여 체계는 직접 정의합니다.

엔드포인트는 기본적으로 요청이 권한 부여되었음을 증명하기 위해 시크릿 문자열을 사용하는 내장 권한 부여 체계 집합을 지원합니다. 내장 체계와 함께 사용하거나 내장 체계 대신 사용할 수 있는 사용자 지정 권한 부여 체계를 정의할 수도 있습니다.

엔드포인트는 다음과 같은 내장 권한 부여 체계를 지원합니다.

모든 인증 사용자는 엔드포인트를 호출할 수 있는 권한이 있습니다. 인증된 요청은 권한 부여 정보를 포함하지 않아도 됩니다.

인증된 사용자는 secret 쿼리 매개변수의 값으로 특정 string 을 포함하여 엔드포인트를 호출할 권한이 있음을 증명해야 합니다.

시크릿의 string 을 정의하고 엔드포인트 구성에서 이름으로 시크릿 을 참조합니다.

http_endpoints/data_api_config.json
[
{
...,
"verification_method": "SECRET_AS_QUERY_PARAM",
"secret_name": "secret_verification_string"
}
]

요청 에 시크릿을 포함하는 방법을 학습 보려면 요청 승인하기를 참조하세요.

인증된 사용자는 요청 본문에서 생성된 16진수로 인코딩된 HMAC SHA-256 해시와 시크릿 string 이 포함된 Endpoint-Signature 헤더를 포함하여 엔드포인트를 호출할 권한이 있음을 증명해야 합니다.

시크릿의 string 을 정의하고 엔드포인트 구성에서 이름으로 시크릿 을 참조합니다.

요청에 서명하는 방법을 학습 보려면 요청 승인을 참조하세요.

사용자 지정 권한 부여 표현식을 정의하여 인증된 수신 요청을 실행할 수 있는지 여부를 결정할 수 있습니다. 표현식은 각 요청에 대해 평가되며 요청을 허용하려면 true로 평가되어야 합니다. 표현식이 false로 평가되면 요청이 승인되지 않고 오류와 함께 실패합니다. 권한 부여에 실패한 요청은 앱 청구 사용량에 포함되지 않습니다.

권한 부여 표현식은 %%user 등의 변수를 사용하여 호출 중인 사용자의 데이터를 기준으로 권한을 부여하거나, %%request 등의 변수를 사용하여 각 수신 요청의 세부 사항을 기준으로 결정을 내릴 수 있습니다.

사용자 정의 권한 부여 체계를 정의하려면 앱의 데이터 API 구성에서 표현식을 지정합니다.

http_endpoints/data_api_config.json
{
...,
"can_evaluate": {
"%%request.requestHeaders.x-secret-key": "my-secret"
}
}

엔드포인트는 2가지 데이터 형식(JSON 또는 EJSON) 중 하나로 데이터를 반환할 수 있습니다.

기본적으로 엔드포인트는 최신 언어 및 플랫폼에서 널리 지원되는 표준 데이터 형식인 JSON을 반환합니다. 그러나 JSON은 MongoDB에 저장할 수 있는 모든 데이터 유형을 표현할 수 없으며 일부 데이터 유형에 대한 유형 정보가 손실됩니다.

EJSON(구조화된 JSON 객체를 사용하여 MongoDB가 지원하는 유형을 완벽하게 표현함)을 반환하도록 엔드포인트를 구성할 수도 있습니다. 이렇게 하면 유형 정보가 응답에 저장되지만, 해당 애플리케이션이 EJSON을 구문 분석하고 사용하는 방법을 이해해야 합니다.

공식 MongoDB 드라이버에는 EJSON으로 작업하는 방법이 포함되어 있습니다. npm에서 bson 같은 독립형 구문 분석기를 다운로드할 수도 있습니다.

https_endpoints/data_api_config.json
{
"return_type": "JSON"
}
https_endpoints/data_api_config.json
{
"return_type": "EJSON"
}

데이터 API는 앱의 데이터 액세스 규칙을 사용하여 사용자가 데이터를 읽고 쓸 수 있는지 여부를 결정합니다. 데이터 API 요청이 특정 컬렉션에 액세스할 수 있도록 허용하려면 먼저 컬렉션에 대한 규칙을 정의해야 합니다.

추가 보안을 위해 IP 액세스 목록을 설정할 수 있습니다.

데이터 API는 내장 버전 관리 체계를 사용하여 이전 버전과의 호환성을 유지하면서 시간이 지남에 따라 엔드포인트를 업그레이드합니다. 수신 요청은 요청 URL에서 사용할 엔드포인트 버전을 지정할 수 있으며, 데이터 API는 활성화한 모든 버전을 제공할 수 있습니다.

사용자가 해당 버전으로 엔드포인트를 호출하려면 새 버전을 활성화해야 합니다. 언제든지 최신 데이터 API 버전을 활성화할 수 있습니다. 그러나 최신 버전이 출시된 후에는 이전 버전을 활성화할 수 없습니다.

현재 지원되는 버전은 다음과 같습니다.

  • beta

  • v1

모든 표준 HTTP 클라이언트에서 데이터 API 엔드포인트를 호출할 수 있습니다. 각 요청에는 요청 본문에 구성 헤더와 인수를 포함할 수 있습니다.

요청 시 HTTP/1.1 이상이 필요합니다.

데이터 API 요청은 요청 URL에 사용할 API 버전을 지정합니다. 요청은 앱에서 사용 가능한 모든 버전을 지정할 수 있습니다.

https://data.mongodb-api.com/app/<App ID>/endpoint/data/<API Version>

데이터 API 요청에는 요청 본문에서 사용된 데이터 형식을 지정하는 Content-Type 헤더가 포함되어야 합니다.

  • 데이터 API 요청 본문에서 표준 JSON 유형을 나타내려면 Content-Type: application/json을 사용합니다.

  • 데이터 API 요청 본문에 표준 JSON 유형 기타 EJSON 유형을 제시하려면 Content-Type: application/ejson을(를) 사용하세요.

curl -X GET \
https://data.mongodb-api.com/app/myapp-abcde/endpoint/data/v1/action/insertOne \
-H 'apiKey: <API Key>' \
-H 'Content-Type: application/ejson' \
-H 'Accept: application/ejson' \
--data-raw '{
"dataSource": "mongodb-atlas",
"database": "learn-data-api",
"collection": "hello",
"document": {
"_id": { "$oid": "629971c0d71aad65bd59c595" },
"greeting": "Hello, EJSON!",
"date": { "$date": { "$numberLong": "1654589430998" } }
}
}'
{ "insertedId": { "$oid": "629971c0d71aad65bd59c595" } }
curl -X POST \
https://data.mongodb-api.com/app/myapp-abcde/endpoint/data/v1/action/updateOne \
-H 'apiKey: <API Key>' \
-H 'Content-Type: application/json' \
--data-raw '{
"dataSource": "mongodb-atlas",
"database": "learn-data-api",
"collection": "hello",
"filter": { "greeting": "Hello, world!" },
"update": {
"$set": { "greeting": "Hello, universe!" }
}
}'
{ "matchedCount": 1, "modifiedCount": 1 }

요청에는 응답 본문에 대한 특정 데이터 형식(JSON 또는 EJSON)을 요청하기 위한 Accept 헤더가 포함될 수 있습니다. 요청에 유효한 Accept 헤더가 포함되지 않은 경우 응답은 데이터 API 구성에 지정된 데이터 형식을 사용합니다.

curl -X GET \
https://data.mongodb-api.com/app/myapp-abcde/endpoint/data/v1/action/findOne \
-H 'apiKey: <API Key>' \
-H 'Content-Type: application/json' \
-H 'Accept: application/ejson' \
--data-raw '{
"dataSource": "mongodb-atlas",
"database": "learn-data-api",
"collection": "hello",
"projection": { "greeting": 1, "date": 1 }
}'
{
"_id": { "$oid": "629971c0d71aad65bd59c545"},
"greeting": "Hello, Leafie!",
"date": { "$date": { "$numberLong": "1654589430998" } }
}
curl -X POST \
https://data.mongodb-api.com/app/myapp-abcde/endpoint/data/v1/action/findOne \
-H 'apiKey: <API Key>' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
--data-raw '{
"dataSource": "mongodb-atlas",
"database": "learn-data-api",
"collection": "hello",
"projection": { "greeting": 1, "date": 1 }
}'
{
"_id": "629971c0d71aad65bd59c545",
"greeting": "Hello, Leafie!",
"date": "2022-06-07T08:10:30.998Z"
}

엔드포인트가 Application Authentication(애플리케이션 인증)을 사용하도록 구성된 경우, 모든 요청에 유효한 사용자 액세스 토큰 또는 로그인 자격 증명을 포함시켜야 합니다.

액세스 토큰을 이용한 베어러 인증은 일반적으로 처리량이 더 높고 자격 증명 헤더보다 안전합니다. 가능하다면 자격 증명 헤더 대신 액세스 토큰을 사용하세요. 이 토큰을 사용하면 사용자를 재인증하지 않고도 여러 요청을 실행할 수 있습니다. 이외에 CORS를 실행하는 웹 브라우저에서 요청을 보낼 수도 있습니다.

액세스 토큰을 사용하려면 먼저 App Services 인증 제공자를 통해 사용자를 인증하세요. 그런 다음 App Services에서 반환된 액세스 토큰을 가져오고, Bearer(베어러) 토큰 체계를 이용하여 요청의 권한 부여 헤더에 이 토큰을 입력하세요. 액세스 토큰의 획득 및 사용 방법에 대한 자세한 내용은 Bearer Token Authentication(베어러 토큰 인증)을 참조하세요.

curl -s "https://data.mongodb-api.com/app/myapp-abcde/endpoint/data/v1/action/findOne" \
-X POST \
-H "Accept: application/json" \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-d '{
"dataSource": "mongodb-atlas",
"database": "sample_mflix",
"collection": "movies",
"filter": {
"title": "The Matrix"
}
}'

또는 요청 헤더에 사용자의 유효한 로그인 자격 증명을 포함할 수 있습니다.

curl -s "https://data.mongodb-api.com/app/myapp-abcde/endpoint/data/v1/action/findOne" \
-X POST \
-H "Accept: application/json" \
-H "email: bob@example" \
-H "password: Pa55w0rd!" \
-d '{
"dataSource": "mongodb-atlas",
"database": "sample_mflix",
"collection": "movies",
"filter": {
"title": "The Matrix"
}
}'
curl -s "https://data.mongodb-api.com/app/myapp-abcde/endpoint/data/v1/action/findOne" \
-X POST \
-H "Accept: application/json" \
-H "apiKey: TpqAKQgvhZE4r6AOzpVydJ9a3tB1BLMrgDzLlBLbihKNDzSJWTAHMVbsMoIOpnM6" \
-d '{
"dataSource": "mongodb-atlas",
"database": "sample_mflix",
"collection": "movies",
"filter": {
"title": "The Matrix"
}
}'
curl -s "https://data.mongodb-api.com/app/myapp-abcde/endpoint/data/v1/action/findOne" \
-X POST \
-H "Accept: application/json" \
-H "jwtTokenString: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJteWFwcC1hYmNkZSIsInN1YiI6IjEyMzQ1Njc4OTAiLCJuYW1lIjoiSm9obiBEb2UiLCJleHAiOjIxNDU5MTY4MDB9.E4fSNtYc0t5XCTv3S8W89P9PKLftC4POLRZdN2zOICI" \
-d '{
"dataSource": "mongodb-atlas",
"database": "sample_mflix",
"collection": "movies",
"filter": {
"title": "The Matrix"
}
}'

중요

사용자 대상 클라이언트에서 API 키를 사용하지 마세요

브라우저 또는 다른 사용자용 클라이언트 애플리케이션에서 인증하는 경우 API 키를 사용하여 로그인하지 않도록 합니다. 대신 사용자가 제공한 자격 증명을 사용하는 다른 인증 제공자를 사용합니다. API 키나 기타 민감한 자격 증명을 로컬에 저장하지 마세요.

데이터 API 권한 부여 구성에 따라 요청에 추가적인 권한 부여 정보를 포함해야 할 수도 있습니다.

모든 인증 사용자는 엔드포인트를 호출할 수 있는 권한이 있습니다. 인증된 요청은 권한 부여 정보를 포함하지 않아도 됩니다.

인증된 사용자는 엔드포인트의 시크릿 string 을 secret 쿼리 매개변수의 값으로 포함하여 엔드포인트를 호출할 권한이 있음을 증명해야 합니다.

예시

다음 curl 요청 은 시크릿 string "12345"과 함께 시크릿 쿼리 매개변수 유효성 검사 를 사용합니다.

curl -X POST \
https://data.mongodb-api.com/app/myapp-abcde/endpoint/data/v1/action/findOne?secret=12345 \
-H "Content-Type: application/json" \
-d '{
"dataSource": "mongodb-atlas",
"database": "learn-data-api",
"collection": "tasks",
"filter": { "text": "Do the dishes" }
}'

인증된 사용자는 요청 본문에서 생성된 16진수로 인코딩된 HMAC SHA-256 해시와 엔드포인트의 시크릿 string 이 포함된 Endpoint-Signature 헤더를 포함하여 엔드포인트를 호출할 권한이 있음을 증명해야 합니다.

Endpoint-Signature: sha256=<hex encoded hash>

다음 함수를 사용하여 페이로드 서명을 생성할 수 있습니다.

/**
* Generate an HMAC request signature.
* @param {string} secret - The secret validation string, e.g. "12345"
* @param {object} body - The endpoint request body e.g. { "message": "MESSAGE" }
* @returns {string} The HMAC SHA-256 request signature in hex format.
*/
exports = function signEndpointRequest(secret, body) {
const payload = EJSON.stringify(body);
return utils.crypto.hmac(payload, secret, "sha256", "hex");
};

예시

다음 curl 에는 시크릿 값 12345 로 서명된 페이로드 서명 헤더가 포함되어 있습니다.

curl -X POST \
https://data.mongodb-api.com/app/myapp-abcde/endpoint/data/v1/action/findOne \
-H "Content-Type: application/json" \
-H "Endpoint-Signature: sha256=769cd86855787f476afc8b0d2cf9837ab0318181fca42f45f34b6dffd086dfc7" \
-d '{
"dataSource": "mongodb-atlas",
"database": "learn-data-api",
"collection": "tasks",
"filter": { "text": "Do the dishes" }
}'

돌아가기

데이터 API 및 HTTPS endpoints 사용 중단