공개 API 원칙
- Cloud Manager 에 대한 프로그래밍 방식의 액세스 를 위한 OAuth 2.0 인증 은 Preview 기능 으로 제공됩니다.
- 기능 및 해당 설명서는 미리 보기 기간에 언제든지 변경될 수 있습니다. OAuth 2.0 인증 을 사용하려면 Cloud Manager 공개 API 에 대한 요청에 사용할서비스 계정을 만듭니다.
Cloud Manager 공용 API 는 REST 아키텍처 원칙을 따라 Cloud Manager의 기능에 프로그래밍 방식으로 액세스할 수 있는 내부 리소스를 노출합니다.
웹 인터페이스를 통한 변경 사항과 마찬가지로 API를 통한 변경 사항에도 Cloud Manager 가격 책정 이 적용됩니다. 서버를 추가하고 요금이 발생하는 경우 Cloud Manager에 유효한 신용카드가 등록되어 있어야 하며, 그렇지 않으면 계정이 잠길 위험이 있습니다.
API에는 다음과 같은 기능이 있습니다.
- JSON 엔터티
- 모든 엔터티는 JSON 으로 표현됩니다.
- 탐색 가능한 인터페이스
- 일관된 연결 메커니즘을 사용하면 루트 리소스에서 시작하여 관련 리소스에 대한 링크를 따라 전체 API를 탐색할 수 있습니다.
- 사용자 액세스 제어
각 Cloud Manager 사용자의 API 기능은 Cloud Manager 역할 이 부여하는 권한과 일치합니다.
예시
Project Read Only
역할을 가진 사용자는 Cloud Manager UI 또는 API 를 통해 해당 프로젝트 내의 리소스를 수정할 수 없습니다.- API 네트워크 액세스 목록
Cloud Manager API 는 API 액세스 목록 을 통해 Cloud Manager 관리 API에 대한 액세스를 보호할 수 있습니다. 이 목록은 API 에 대한 액세스를 특정 IP 또는 CIDR 주소로 제한합니다. 각 API 키에는 고유한 Cloud Manager 관리 API 액세스 목록이 있습니다. Cloud Manager UI를 사용하여 새 조직을 생성하면 MongoDB Atlas는 기본적으로 API 액세스 목록 요구 사항을 활성화합니다.
- HTTPS 전용
- HTTPS 를 통해서만 API 에 액세스할 수 있으며, HTTPS는 네트워크를 통해 전송되는 모든 데이터가 TLS 를 사용하여 완전히 암호화되도록 합니다.
HTTP 메서드
모든 리소스는 다음과 같은 일반적인 HTTP 메서드의 하위 집합을 지원합니다.
메서드 | 목적 |
---|---|
| 리소스의 JSON 표현을 검색합니다. |
| 제공된 JSON 표현을 사용하여 새 리소스를 만듭니다. |
| 리소스를 제공된 JSON 표현으로 바꿉니다. |
| 제공된 JSON 표현을 사용하여 리소스에서 지정된 필드를 업데이트합니다. |
| 리소스를 제거합니다. |
| 리소스의 JSON 표현 없이 응답 헤더를 검색합니다. |
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
필드에 배치됩니다. 각 링크 관계에는 두 개의 필드가 있습니다.
필드 | 정의 |
---|---|
| Name (or type) of the relation. 이 중 상당수가 확장 관계 유형으로 간주되며 앞에 |
| 대상 URL. |
모든 엔터티에는 자체 URL 인 self
이라는 링크 관계가 하나 이상 포함되어 있습니다. 엔터티가 목록의 일부인 경우(즉, 프로젝트의 모든 호스트를 요청하는 경우) 여기에는 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를 쉽게 탐색할 수 있도록 응답 헤더가 아닌 응답 본문에 링크를 포함합니다.
목록
일부 리소스는 엔터티 목록을 반환합니다.
예시
프로젝트 에 있는 모든 호스트 목록을 요청할 수 있습니다.
응답에서 엔터티 목록이 예상되는 경우 결과는 두 개의 쿼리 매개변수에 의해 제한된 배치로 반환됩니다.
필드 | 정의 |
---|---|
| 페이지 번호(1 기준). 지정하지 않으면 기본값은 1입니다. |
| 페이지당 반환할 항목 수(최대 500개)입니다. 지정하지 않으면 기본값은 100입니다. |
응답 엔터티에는 세 개의 필드가 포함되어 있습니다.
필드 | 정의 |
---|---|
| 전체 결과 세트의 총 항목 수입니다. 예를 예시 프로젝트 에 총 57 개의 호스트가 있고 |
| 엔터티 문서의 배열인 결과 집합입니다. |
| 1~3개의 링크 관계를 포함합니다.
|
엔터티 목록을 요청했는데 결과가 없는 경우 API 는 HTTP 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 }
Envelopes
일부 클라이언트는 HTTP 응답 헤더 및/또는 상태 코드에 액세스하지 못할 수 있습니다. 이 경우 응답에 envelope
을 포함하도록 요청할 수 있으며, 이는 일반적으로 응답 헤더에 있는 관련 세부 정보를 포함하는 JSON 문서의 추가 정보 계층일 뿐입니다.
기본적으로 API 는 엔벨로프에 응답을 포함하지 않습니다 . 요청하려면 쿼리 매개변수 envelope=true
를 추가하기만 하면 됩니다.
단일 엔터티가 포함된 응답의 경우 엔벨로프에는 다음과 같은 두 개의 필드가 포함됩니다.
필드 | 정의 |
---|---|
| HTTP 상태 코드입니다. |
| 요청된 엔터티입니다. |
엔터티 목록이 포함된 응답의 경우 결과를 래핑하는 엔벨로프가 이미 있으므로 이 경우 envelope=true
을 쿼리 매개 변수로 지정하면 기존 엔벨로프에 status
필드만 추가됩니다.
Pretty Printing
기본적으로 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 | 확인 | 요청이 성공했습니다. 이는 성공적인 |
201 | 생성됨 | 새 리소스가 생성되었습니다. 이는 성공적인 |
202 | 수락됨 | 비동기 작업에 대한 요청이 수락되었습니다. |
400 | 잘못된 요청 | 클라이언트 요청에 문제가 있습니다. |
401 | 승인되지 않음 | 인증이 필요하지만 요청에 포함되지 않았습니다. 일반적으로 이는 다이제스트 인증 정보가 요청에서 생략되었거나, 제공된 자격 증명이 올바르지 않거나, 지정된 API 키와 연결된 사용자가 요청된 리소스에 액세스할 수 없음을 의미합니다. |
403 | Forbidden | 지정된 리소스에 대한 액세스가 허용되지 않습니다. |
404 | 찾을 수 없습니다. | 요청된 리소스가 존재하지 않습니다. |
405 | 허용되지 않는 메서드 | 지정된 리소스에 대해 HTTP 메서드가 지원되지 않습니다. 각 리소스는 HTTP 메서드의 하위 집합만 지원할 수 있다는 점에 유의하세요. 예를 예시, 루트 리소스 를 |
409 | 충돌 | 이는 일반적으로 기존 엔터티가 해당 속성에 대해 동일한 값을 가진 경우 고유한 엔터티의 속성을 만들거나 수정하라는 요청에 대한 응답입니다. 예를 예시 기존 프로젝트 와 동일한 이름으로 프로젝트를 프로젝트 려고 하면 요청 이 실패합니다. |
5xx | 다양한 서버 오류 | 예기치 않은 문제가 발생했습니다. 나중에 다시 시도하고 Cloud Manager 지원팀에 알리는 것이 좋습니다. |
오류
요청 결과에 오류가 발생하면 응답 본문에 무엇이 잘못되었는지에 대한 추가 세부 정보가 포함된 JSON 문서가 포함됩니다. 문서에는 다음과 같은 5개의 필드가 있습니다.
필드 | 데이터 유형 | 정의 |
---|---|---|
| 문자열 | API 요청 오류에 대한 사람이 읽을 수 있는 설명입니다. |
| integer | HTTP 상태 코드. |
| 문자열 | Cloud Manager 관리 API 오류 코드 에 표시된 대로 API 요청 오류를 나타내는 명명된 상수입니다. |
| 문자열 배열 | API 요청에서 전달된 매개변수 목록입니다. |
| 문자열 | HTTP 상태 코드 정의. |
예시
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 API 는 API 키 또는 서비스 계정이라는 두 가지 방법 중 하나를 사용하여 요청을 인증합니다. 이렇게 하면 사용자 이름과 비밀번호 제공 을 하는 키와 액세스 토큰이 네트워크를 통해 전송되지 않습니다. 사용법에 대한 자세한 내용은 Cloud Manager 에 대한 프로그래밍 방식 액세스를 참조하세요.
API 키 | 서비스 계정 |
---|---|
HTTP 다이제스트 인증을 사용하는 Cloud Manager 에 대한 레거시 인증 방법입니다. | 클라이언트 자격 증명 흐름과 함께 업계 표준 OAuth 2.0 프로토콜 을 사용하여 Cloud Manager 에 인증하는 새로운 방법입니다. 현재 Preview 중입니다. |
API 키는 공개 키와 비공개 키의 두 부분으로 구성됩니다. 이 두 부분은 Cloud Manager 에 API 요청을 할 때 사용자 이름 및 비밀번호와 동일한 기능을 제공 합니다. | 서비스 계정을 사용하면 권한을 관리 하고 액세스 토큰을 만들 수 있습니다. 서비스 계정에는 액세스 토큰을 생성하기 위한 사용자 이름 및 비밀번호 역할을 하는 클라이언트 ID 와 시크릿이 있습니다. 액세스 토큰을 사용하면 Cloud Manager 에 API 요청을 할 수 있습니다. |
Cloud Manager 는 논스(nonce) 라는 고유 값을 사용하여 공개 키와 개인 키를 해시합니다. 논스는 HTTP 다이제스트 사양에 따라 짧은 시간 동안만 유효합니다. 이는 재생 공격을 방지하기 위한 것이므로 논스를 캐시 하여 영원히 사용할 수 없습니다. | 서비스 계정을 만든 후에는 해당 클라이언트 ID 와 시크릿을 사용하여 API 요청을 인증하는 액세스 토큰을 생성합니다. 액세스 토큰은 OAuth 2.0 사양에 따라 1 시간(3600 초) 동안만 유효합니다. 액세스 토큰 만료는 유출된 액세스 토큰을 시간 제한 없이 사용할 수 있는 재생 공격을 방지합니다. |
Cloud Manager 역할은 API 키가 수행할 수 있는 작업을 제한합니다. API 키가 오류 없이 API 엔드포인트를 호출할 수 있도록 하려면 사용자에게 하는 것처럼 API 키에 역할을 부여해야 합니다. | |
Cloud Manager 는 많은 리소스를 프로젝트 에 바인딩합니다. 많은 API 리소스 URL 은 형식을 | Cloud Manager 는 많은 리소스를 프로젝트 에 바인딩합니다. 많은 API 리소스 URL 은 형식을 |
각 API 키는 하나의 조직에만 속하지만, 해당 조직의 프로젝트 수에 상관없이 API 키에 액세스 권한을 부여할 수 있습니다. | 각 서비스 계정은 하나의 조직에만 속하지만, 해당 조직의 프로젝트 수에 관계없이 서비스 계정에 대한 액세스 권한을 부여할 수 있습니다. |
일부 리소스 메서드는 훨씬 더 강력한 보안이 필요하며, 나열된 IP 주소에서만 리소스에 대한 액세스를 허용하는 액세스 목록 으로 추가 보호됩니다. 각 사용자는 리소스에 대한 액세스를 허용하는 IP 주소의 액세스 목록을 자체적으로 구성합니다.
자동화
최신 계획 리소스의 자동화 구성 리소스 및 자동화 상태 가져오기는 프로젝트의 배포를 수정하고 배포 상태를 검색할 수 있는 엔드포인트를 제공합니다. 새 자동화 구성 을 Cloud Manager로 전송하여 배포를 수정할 수 있습니다. 자동화 구성에서는 배포할 MongoDB 프로세스를 설명하고 구성합니다. Cloud Manager는 이를 배포의 " 목표 상태 " 라고 합니다. API 를 통해 새 자동화 구성을 제출하면 자동화는 목표 상태에 일치하도록 시스템의 현재 상태를 조정합니다.
중요
API 에는 동시 수정을 방지하는 보호 기능이 없습니다. 두 명의 관리자가 모두 현재 버전을 기반으로 하는 구성으로 시작하여 직접 수정한 다음 수정 사항을 제출하는 경우 나중에 수정한 것이 우선합니다.
속도 제한
특정 리소스에는 속도 제한이 적용됩니다.
속도가 제한된 리소스의 경우 Cloud Manager는 프로젝트 당 분당 최대 100건의 요청을 허용합니다. 공개 API 키는 Cloud Manager 사용자에게 할당되지만 해당 사용자는 여러 프로젝트에 액세스할 수 있습니다.
예시
A와 B라는 두 사용자가 있다고 가정해 보겠습니다.
사용자 A는 프로젝트 X에 속해 있고, 사용자 B는 프로젝트 X와 Y에 속해 있습니다.
오후 1:00:00에 사용자 A가 프로젝트 X의 속도 제한 리소스에 대해 50개의 요청을 하고, 이 요청을 오후 1:00:20까지 모두 완료합니다.
오후 1:00:30에 사용자 B가 프로젝트 X의 속도 제한 리소스에 요청 60건을 시도합니다.
사용자 A가 오후 1시 1분 내에 프로젝트 X에 대해 이미 요청 50건을 사용했기 때문에 사용자 B가 시도하는 마지막 요청 10건은 거부됩니다. 그러나 사용자 B는 프로젝트 Y의 속도 제한 리소스에 요청을 할 수 있습니다. 각 프로젝트가 별도의 요청 카운터를 유지하기 때문입니다.
오후 1시 1분에 속도 제한에 사용되는 요청 카운터가 매분 재설정되므로 프로젝트 X에 대한 요청이 진행될 수 있습니다.
속도 제한을 초과하면 API 는 HTTP 429 Too Many Requests
응답 코드를 반환합니다.
추가 정보
Cloud Manager 공용 API 에서 사용할 수 있는 모든 리소스에 대한 전체 참고 자료는 Cloud Manager 관리 API 리소스 를 참조하세요.