문서 메뉴
문서 홈
/
MongoDB Cloud Manager
/

공개 API 원칙

이 페이지의 내용

  • HTTP 메서드
  • JSON
  • 연결
  • 목록
  • Envelopes
  • Pretty Printing
  • 응답 코드
  • 오류
  • 인증
  • 자동화
  • 속도 제한
  • 추가 정보

Cloud Manager 공용 APIREST 아키텍처 원칙을 따라 Cloud Manager의 기능에 프로그래밍 방식으로 액세스할 수 있는 내부 리소스를 노출합니다.

웹 인터페이스를 통한 변경 사항과 마찬가지로 API를 통한 변경 사항에도 Cloud Manager 가격 책정 이 적용됩니다. 서버를 추가하고 요금이 발생하는 경우 Cloud Manager에 등록된 유효한 신용 카드가 있어야 하며, 그렇지 않으면 계정이 잠길 위험이 있습니다.

API에는 다음과 같은 기능이 있습니다.

JSON 엔터티
모든 엔터티는 JSON 으로 표현됩니다.
키 기반 액세스
Cloud Manager에 연결해야 하는 각 Cloud Manager 사용자 또는 애플리케이션은 Cloud Manager API 에 액세스하기 전에 API 키를 생성 해야 합니다.
다이제스트 인증
공개 API 키 가 네트워크를 통해 전송되지 않도록API 요청은 HTTP 다이제스트 인증을 사용하여 인증됩니다.
탐색 가능한 인터페이스
일관된 연결 메커니즘을 사용하면 루트 리소스에서 시작하여 관련 리소스에 대한 링크를 따라 전체 API를 탐색할 수 있습니다.
사용자 액세스 제어

각 Cloud Manager 사용자의 API 기능은 Cloud Manager 역할 이 부여하는 권한과 일치합니다.

예제

API 네트워크 액세스 목록

Cloud Manager APIAPI 액세스 목록 을 통해 Cloud Manager 관리 API에 대한 액세스를 보호할 수 있습니다. 이 목록은 API 에 대한 액세스를 특정 IP 또는 CIDR 주소로 제한합니다. 각 API 키에는 고유한 Cloud Manager 관리 API 액세스 목록이 있습니다. Cloud Manager UI를 사용하여 새 조직을 생성하면 MongoDB Atlas는 기본적으로 API 액세스 목록 요구 사항을 활성화합니다.

자세한 내용은 (선택 사항) 조직에 API 액세스 목록 필요를 참조하세요.

HTTPS 전용
HTTPS 를 통해서만 API 에 액세스할 수 있으며, HTTPS는 네트워크를 통해 전송되는 모든 데이터가 TLS 를 사용하여 완전히 암호화되도록 합니다.

모든 리소스는 다음과 같은 일반적인 HTTP 메서드의 하위 집합을 지원합니다.

메서드
목적
GET
리소스의 JSON 표현을 검색합니다.
POST
제공된 JSON 표현을 사용하여 새 리소스를 만듭니다.
PUT
리소스를 제공된 JSON 표현으로 바꿉니다.
PATCH
제공된 JSON 표현을 사용하여 리소스에서 지정된 필드를 업데이트합니다.
DELETE
리소스를 제거합니다.
HEAD
리소스의 JSON 표현 없이 응답 헤더를 검색합니다.

모든 엔터티는 JSON 으로 표시됩니다. 요청에는 다음 규칙과 응답 규칙이 적용됩니다.

올바른 콘텐츠 유형 헤더 적용
POST 또는 PUT 을 통해 서버에 JSON 을 보낼 때는 올바른 콘텐츠 유형 요청 헤더 Content-Type: application/json를 지정해야 합니다.
날짜를 ISO 로 설정 8601 문자열

서버에 날짜를 보낼 때(POST 또는 요청 엔터티의 쿼리 매개변수 또는 PATCH 필드로)ISO 에 따라 형식이 8601 지정된 날짜를 사용하세요. 표준. 시간대를 지정하지 않으면 Cloud Manager는 UTC 를 가정합니다. 모호하지 않도록 표준 시간대 지정자를 포함하세요.

예제

  • 2018년 9월 27일은 2018-09-27 으로 표현됩니다.

  • 2018년 9월 27일 오후 4:00 EDT는 (구역 포함) 2018-09-27T16:00-04:00 으로 표현됩니다.

경우에 따라 타임스탬프가 BSON 타임스탬프 의 JSON표현으로 반환되는 경우도 있습니다. , 가장 주목할 만한 것은 백업 리소스입니다. 이 BSON 타임스탬프 표현은 JSON 문서를 두 개의 필드가 있는 객체로 제공합니다.

필드
정의
date
유닉스 시간 이후의 시간(초)
increment
주어진 초 내의 작업에 대한 증분 32비트 정수 서수입니다.

예제

2018년 9월 27일 오후 4시(EDT)에 있는 세 번째 연산은 (구역 포함) 다음과 같이 표현됩니다.

{ date: 2018-09-27T16:00-04:00, increment: 3 }
유효하지 않은 필드 거부

유효하지 않은 필드는 무시 되지 않고 거부 됩니다.

예제

새 엔터티를 만들려고 시도하면서 필드 중 하나의 철자를 잘못 입력하거나, 기존 엔터티를 업데이트하려고 할 때 수정할 수 없는 필드를 포함하려는 경우, Cloud Manager는 HTTP 400 상태 코드와 어떤 필드가 잘못되었는지를 나타내는 오류 메시지로 응답합니다. 유효하지 않습니다.

날짜를 ISO 8601 로 반환 문자열
모든 날짜는 ISO 8601로 반환됩니다.-UTC 로 지정된 형식의 문자열.
단위를 명확하게 하는 레이블 필드

특정 단위의 숫자 값이 포함된 필드는 사용 중인 단위를 명확하게 하기 위해 이름이 지정됩니다.

예제

호스트의 가동 시간은 밀리초 단위로 반환되므로 호스트 엔터티 필드의 이름은 uptimeMsec 입니다.

다른 값이 없는 필드의 기본값 반환

현재 값이 없는 필드는 적절한 기본값과 함께 반환됩니다.

예제

Cloud Manager에는 새로 검색된 호스트에 대한 통계가 없으므로 통계 관련 필드의 값은 모두 0입니다.

적절한 기본값이 없는 필드는 엔터티에서 생략됩니다.

예제

인증을 사용하지 않는 호스트는 반환된 엔터티에서 username 필드를 생략합니다.

필드를 알파벳 순서로 반환
Cloud Manager가 반환하는 JSON 문서의 필드는 알파벳순입니다. 순서는 변경될 수 있습니다. 필드의 순서에 의존하지 마세요.

각 리소스에는 하위 리소스 및/또는 관련 리소스에 대한 링크가 하나 이상 포함되어 있습니다.

예제

호스트에는 호스트가 속한 프로젝트, 호스트가 속한 복제본 세트 등에 대한 링크가 있습니다.

링크는 링크 관계 객체의 배열인 엔터티의 links 필드에 배치됩니다. 각 링크 관계에는 두 개의 필드가 있습니다.

필드
정의
rel
Name (or type) of the relation. 이 중 상당수가 확장 관계 유형으로 간주되며 앞에 http://mms.mongodb.com 이 붙습니다.
href
대상 URL.

모든 엔터티에는 자체 URLself 이라는 링크 관계가 하나 이상 포함되어 있습니다. 엔터티가 목록의 일부인 경우(즉, 프로젝트의 모든 호스트를 요청하는 경우) 여기에는 self 링크 관계만 포함됩니다.

예제

다음은 몇 가지 링크가 있는 host 리소스의 일부입니다.

1{
2 "id": "xxx",
3 "projectId": "yyy",
4 "hostname": "mongodb.example.com",
5 "port": 27017,
6 "links": [
7 {
8 "rel": "self",
9 "href": "https://cloud.mongodb.com/api/public/v1.0/projects/xxx/hosts/yyy"
10 },
11 {
12 "rel": "http://mms.mongodb.com/project",
13 "href": "https://cloud.mongodb.com/api/public/v1.0/projects/xxx"
14 }
15 ]
16}

자세한 내용은 웹 연결 사양 을 참조하세요. .

참고

웹 링크 사양 HTTP 응답 헤더에 링크를 포함하는 형식을 설명하지만 필수 사항은 아닙니다. API를 쉽게 탐색할 수 있도록 응답 헤더가 아닌 응답 본문에 링크를 포함합니다.

일부 리소스는 엔터티 목록을 반환합니다.

예제

프로젝트 에 있는 모든 호스트 목록을 요청할 수 있습니다.

응답에서 엔터티 목록이 예상되는 경우 결과는 두 개의 쿼리 매개변수에 의해 제한된 배치로 반환됩니다.

필드
정의
pageNum
페이지 번호(1 기준). 지정하지 않으면 기본값은 1입니다.
itemsPerPage
페이지당 반환할 항목 수(최대 500개)입니다. 지정하지 않으면 기본값은 100입니다.

응답 엔터티에는 세 개의 필드가 포함되어 있습니다.

필드
정의
totalCount

전체 결과 세트의 총 항목 수입니다.

예제

프로젝트에 총 57개의 호스트가 있고 pageNum=6itemsPerPage=10 사용하여 요청하는 경우 totalCount57 입니다.

results
엔터티 문서의 배열인 결과 집합입니다.
links

1~3개의 링크 관계를 포함합니다.

  • previous 이전 페이지의 결과(첫 번째 페이지의 경우 생략),

  • next 다음 결과 페이지의 경우(마지막 페이지의 경우 생략됨)

  • self 현재 페이지에 해당합니다(항상 표시됨).

엔터티 목록을 요청했는데 결과가 없는 경우 APIHTTP 200 상태 코드와 빈 results 배열로 응답합니다. 이 경우 404로 응답하지 않는데 , 이는 엔터티 목록이 나중에 비어 있지 않을 수도 있기 때문입니다.

존재하지 않는 컨텍스트의 엔터티 목록(예: 존재하지 않는 프로젝트의 호스트 목록)을 요청한 경우 HTTP 404 응답 상태가 됩니다.

예제

다음은 총 57개의 호스트가 있는 프로젝트에서 호스트 10개로 구성된 두 번째 페이지에 대한 HTTP 응답입니다.

1{
2
3 "totalCount": 57,
4 "results": [
5 {
6 "id": "yyy",
7 "projectId": "xxx",
8 // additional host properties...
9 },
10 // additional host documents...
11 ],
12 "links": [
13 {
14 "rel" : "self",
15 "href" : "https://www.mongodb.com/api/public/v1.0/projects/xxx/hosts?pageNum=2&itemsPerPage=10"
16 },
17 {
18 "rel": "previous",
19 "href": "https://www.mongodb.com/api/public/v1.0/projects/xxx/hosts?itemsPerPage=10&pageNum=1"
20 },
21 {
22 "rel": "next",
23 "href": "https://www.mongodb.com/api/public/v1.0/projects/xxx/hosts?itemsPerPage=10&pageNum=3"
24 }
25 ]
26}

일부 클라이언트는 HTTP 응답 헤더 및/또는 상태 코드에 액세스하지 못할 수 있습니다. 이 경우 응답에 envelope 을 포함하도록 요청할 수 있으며, 이는 일반적으로 응답 헤더에 있는 관련 세부 정보를 포함하는 JSON 문서의 추가 정보 계층일 뿐입니다.

기본적으로 API 는 엔벨로프에 응답을 포함하지 않습니다 . 요청하려면 쿼리 매개변수 envelope=true 를 추가하기만 하면 됩니다.

단일 엔터티가 포함된 응답의 경우 엔벨로프에는 다음과 같은 두 개의 필드가 포함됩니다.

필드
정의
status
HTTP 상태 코드입니다.
content
요청된 엔터티입니다.

엔터티 목록이 포함된 응답의 경우 결과를 래핑하는 엔벨로프가 이미 있으므로 이 경우 envelope=true 을 쿼리 매개 변수로 지정하면 기존 엔벨로프에 status 필드만 추가됩니다.

기본적으로 Cloud Manager가 반환하는 JSON 에서 불필요한 공백은 제거됩니다. 깔끔하게 출력된 JSON 을 요청하려면 요청에 pretty=true 쿼리 매개변수를 추가하기만 하면 됩니다.

curl --user '{PUBLIC-KEY}:{PRIVATE-KEY}' --digest \
--header 'Accept: application/json' \
--include \
--request GET "https://cloud.mongodb.com/api/public/v1.0?pretty=true"

참고

이 문서의 모든 예제는 명확성을 위해 깔끔하게 인쇄된 JSON 을 표시하지만, 일부 예제 URL 에는 이 추가 쿼리 매개변수가 포함되어 있지 않을 수 있습니다.

응답은 다음을 포함한 표준 HTTP 응답 코드를 활용합니다.

코드
의미
참고 사항
200
확인
요청이 성공했습니다. 이는 성공적인 GET 요청에 대한 일반적인 응답입니다.
201
생성됨
새 리소스가 생성되었습니다. 이는 성공적인 POST 요청에 대한 일반적인 응답입니다.
202
수락됨
비동기 작업에 대한 요청이 수락되었습니다.
400
잘못된 요청
클라이언트 요청에 문제가 있습니다.
401
승인되지 않음
인증이 필요하지만 요청에 포함되지 않았습니다. 일반적으로 이는 다이제스트 인증 정보가 요청에서 생략되었거나, 제공된 자격 증명이 올바르지 않거나, 지정된 API 키와 연결된 사용자가 요청된 리소스에 액세스할 수 없음을 의미합니다.
403
Forbidden
지정된 리소스에 대한 액세스가 허용되지 않습니다.
404
찾을 수 없습니다.
요청된 리소스가 존재하지 않습니다.
405
허용되지 않는 메서드

지정된 리소스에 대해 HTTP 메서드가 지원되지 않습니다. 각 리소스는 HTTP 메서드의 하위 집합만 지원할 수 있다는 점에 유의하세요.

예제

루트 리소스를 DELETE 사용할 수 없습니다.

409
충돌

이는 일반적으로 기존 엔터티가 해당 속성에 대해 동일한 값을 가진 경우 고유한 엔터티의 속성을 만들거나 수정하라는 요청에 대한 응답입니다.

예제

기존 프로젝트와 동일한 이름으로 프로젝트를 생성 하려고 하면 요청이 실패합니다.

5xx
다양한 서버 오류
예기치 않은 문제가 발생했습니다. 나중에 다시 시도하고 Cloud Manager 지원팀에 알리는 것이 좋습니다.

요청 결과에 오류가 발생하면 응답 본문에 무엇이 잘못되었는지에 대한 추가 세부 정보가 포함된 JSON 문서가 포함됩니다. 문서에는 다음과 같은 5개의 필드가 있습니다.

필드
데이터 유형
정의
detail
문자열
API 요청 오류에 대한 사람이 읽을 수 있는 설명입니다.
error
integer
errorCode
문자열
Cloud Manager 관리 API 오류 코드 에 표시된 대로 API 요청 오류를 나타내는 명명된 상수입니다.
parameters
문자열 배열
API 요청에서 전달된 매개변수 목록입니다.
reason
문자열

예제

Cloud Manager는 형식이 잘못된 요청에 대해 다음 응답 본문을 반환합니다.

1{
2 "detail" : "Cannot find resource /api/public/v1.0/softwareComponents/version.",
3 "error" : 404,
4 "errorCode" : "RESOURCE_NOT_FOUND",
5 "parameters" : [ "/api/public/v1.0/softwareComponents/version" ],
6 "reason" : "Not Found"
7}

코드 목록을 검토하려면 Cloud Manager 관리 API 오류 코드를 참조하세요.

앞서 언급했듯이 Cloud Manager APIHTTP 다이제스트 인증을 사용합니다. 다이제스트 인증에 대한 자세한 내용은 이 문서의 범위를 벗어나지만, 기본적으로 논스( nonce) 라는 서버 생성 고유 값을 사용하여 해시되는 사용자 이름과 비밀번호가 필요합니다. 사용자 이름은 등록된 Cloud Manager 계정의 사용자 이름이고, 비밀번호는 해당 계정과 연결된 공개 API 키 입니다.

다음 사항에 유의하세요.

  • 서버에서 생성한 논스는 요청을 인증하기 위해 서버로 다시 보내기 전에 클라이언트가 사용자 이름과 비밀번호를 해시하는 데 사용됩니다. 논스는 다이제스트 인증 사양에 따라 짧은 시간 동안만 유효합니다. 이는 재생 공격을 방지하기 위한 것이므로 논스를 캐시하여 영구적으로 사용할 수 없습니다.

  • HTTPS 와 함께 다이제스트 인증을 사용하면 비밀번호가 서버로 다시 전송되지 않도록 하여 추가 보안 계층을 제공합니다.

  • 일부 리소스 메서드는 훨씬 더 강력한 보안이 필요하며, 나열된 IP 주소에서만 리소스에 대한 액세스를 허용하는 액세스 목록 으로 추가 보호됩니다. 각 사용자는 리소스에 대한 액세스를 허용하는 IP 주소의 액세스 목록을 자체적으로 구성합니다.

  • Cloud Manager에는 역할 개념이 있으며, 이를 통해 사용자가 수행할 수 있는 작업을 보다 세밀하게 제어할 수 있습니다. API 리소스는 동일한 권한 부여 규칙을 시행하므로 API 키로 액세스할 수 있는 리소스와 메서드는 연결된 사용자에게 부여된 역할에 따라 관리됩니다.

    예제

    호스트를 DELETE 하려면 요청에 사용된 API 키를 소유한 사용자가 호스트가 속한 프로젝트에서 Project Monitoring Admin 또는 Project Owner 이어야 합니다.

  • 다음 형식의 URL을 통해 알 수 있듯이 많은 리소스가 프로젝트(이전에는 그룹 )에 연결되어 있습니다.

    /api/public/v1.0/groups/{PROJECT-ID}/

    이러한 리소스의 경우 API 키에 연결된 사용자는 프로젝트의 멤버여야 합니다. 그렇지 않으면 Cloud Manager가 HTTP 401 오류로 응답합니다.

최신 계획 리소스의 자동화 구성 리소스 및 자동화 상태 가져오기는 프로젝트의 배포를 수정하고 배포 상태를 검색할 수 있는 엔드포인트를 제공합니다. 새 자동화 구성 을 Cloud Manager로 전송하여 배포를 수정할 수 있습니다. 자동화 구성에서는 배포할 MongoDB 프로세스를 설명하고 구성합니다. Cloud Manager는 이를 배포의 " 목표 상태 " 라고 합니다. API 를 통해 새 자동화 구성을 제출하면 자동화는 목표 상태에 일치하도록 시스템의 현재 상태를 조정합니다.

중요

API 에는 동시 수정을 방지하는 보호 기능이 없습니다. 두 명의 관리자가 모두 현재 버전을 기반으로 하는 구성으로 시작하여 직접 수정한 다음 수정 사항을 제출하는 경우 나중에 수정한 것이 우선합니다.

특정 리소스에는 속도 제한이 적용됩니다.

속도가 제한된 리소스의 경우 Cloud Manager는 프로젝트 당 분당 최대 100건의 요청을 허용합니다. 공개 API 키는 Cloud Manager 사용자에게 할당되지만 해당 사용자는 여러 프로젝트에 액세스할 수 있습니다.

예제

A와 B라는 두 사용자가 있다고 가정해 보겠습니다.

사용자 A는 프로젝트 X에 속해 있고, 사용자 B는 프로젝트 X와 Y에 속해 있습니다.

  1. 오후 1:00:00에 사용자 A가 프로젝트 X의 속도 제한 리소스에 대해 50개의 요청을 하고, 이 요청을 오후 1:00:20까지 모두 완료합니다.

  2. 오후 1:00:30에 사용자 B가 프로젝트 X의 속도 제한 리소스에 요청 60건을 시도합니다.

    사용자 A가 오후 1시 1분 내에 프로젝트 X에 대해 이미 요청 50건을 사용했기 때문에 사용자 B가 시도하는 마지막 요청 10건은 거부됩니다. 그러나 사용자 B는 프로젝트 Y의 속도 제한 리소스에 요청을 할 수 있습니다. 각 프로젝트가 별도의 요청 카운터를 유지하기 때문입니다.

  3. 오후 1시 1분에 속도 제한에 사용되는 요청 카운터가 매분 재설정되므로 프로젝트 X에 대한 요청이 진행될 수 있습니다.

속도 제한을 초과하면 APIHTTP 429 Too Many Requests 응답 코드를 반환합니다.

Cloud Manager 공용 API 에서 사용할 수 있는 모든 리소스에 대한 전체 참고 자료는 Cloud Manager 관리 API 리소스 를 참조하세요.

돌아가기

API

다음

Cloud Manager 관리 API 리소스