공개 API 원칙
Ops Manager 공개 API 는 REST 아키텍처 원칙을 따라 Ops Manager의 기능에 대한 프로그래밍 방식의 액세스를 제공하는 내부 리소스를 노출합니다.
API에는 다음과 같은 기능이 있습니다.
- JSON 엔터티
- 모든 엔터티는 JSON 으로 표현됩니다.
- 키 기반 액세스
- MongoDB Ops 에 API 연결해야 하는 각 사용자 또는 애플리케이션 MongoDB Ops Manager MongoDB Ops Manager API은 에 액세스하기 전에 키를 생성 해야 합니다.MongoDB Ops Manager
- 다이제스트 인증
- 공개 API 키 가 네트워크를 통해 전송되지 않도록API 요청은 HTTP 다이제스트 인증을 사용하여 인증됩니다.
- 탐색 가능한 인터페이스
- 일관된 연결 메커니즘을 사용하면 루트 리소스에서 시작하여 관련 리소스에 대한 링크를 따라 전체 API를 탐색할 수 있습니다.
- 사용자 액세스 제어
각 Ops Manager 사용자의 API 기능은 Ops Manager 역할 이 부여하는 권한과 일치합니다.
예시
Project Read Only
역할을 가진 사용자는 Ops Manager UI 또는 API 를 통해 해당 프로젝트 내의 리소스를 수정할 수 없습니다.- API 네트워크 액세스 목록
Ops Manager API 는 API 액세스 목록 을 통해 Ops Manager 관리 API에 대한 액세스를 보호할 수 있습니다. 이 목록은 API 에 대한 액세스를 특정 IP 또는 CIDR 주소로 제한합니다. 각 API 키에는 고유한 Ops Manager 관리 API 액세스 목록이 있습니다. Ops Manager UI를 사용하여 새 조직을 생성하면 MongoDB Atlas는 기본적으로 API 액세스 목록 요구 사항을 활성화합니다.
HTTP 메서드
모든 리소스는 다음과 같은 일반적인 HTTP 메서드의 하위 집합을 지원합니다.
메서드 | 목적 |
---|---|
| 리소스의 JSON 표현을 검색합니다. |
| 제공된 JSON 표현을 사용하여 새 리소스를 만듭니다. |
| 리소스를 제공된 JSON 표현으로 바꿉니다. |
| 제공된 JSON 표현을 사용하여 리소스에서 지정된 필드를 업데이트합니다. |
| 리소스를 제거합니다. |
| 리소스의 JSON 표현 없이 응답 헤더를 검색합니다. |
JSON
모든 엔터티는 JSON 으로 표시됩니다. 요청에는 다음 규칙과 응답 규칙이 적용됩니다.
요청 규칙
- 올바른 콘텐츠 유형 헤더 적용
POST
또는PUT
을 통해 서버에 JSON 을 보낼 때는 올바른 콘텐츠 유형 요청 헤더Content-Type: application/json
를 지정해야 합니다.- 날짜를 ISO 로 설정 8601 문자열
서버에 날짜를 보낼 때(
POST
또는 요청 엔터티의 쿼리 매개변수 또는PATCH
필드로)ISO 에 따라 형식이 8601 지정된 날짜를 사용하세요. 표준. 시간대를 지정하지 않으면 MongoDB Ops 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 }
응답 규칙
- 유효하지 않은 필드 거부
유효하지 않은 필드는 무시 되지 않고 거부 됩니다.
예시
새 엔터티를 만들려고 시도하면서 필드 중 하나의 철자를 잘못 입력하거나, 기존 엔터티를 업데이트하려고 시도할 때 수정할 수 없는 필드를 포함하려는 경우, Ops Manager가 HTTP 400 상태 코드와 어떤 필드가 잘못되었는지를 나타내는 오류 메시지로 응답합니다. 유효하지 않습니다.
- 날짜를 ISO 8601 로 반환 문자열
- 모든 날짜는 ISO 8601로 반환됩니다.-UTC 로 지정된 형식의 문자열.
- 단위를 명확하게 하는 레이블 필드
특정 단위의 숫자 값이 포함된 필드는 사용 중인 단위를 명확하게 하기 위해 이름이 지정됩니다.
예시
호스트의 가동 시간은 밀리초 단위로 반환되므로 호스트 엔터티 필드의 이름은
uptimeMsec
입니다.- 다른 값이 없는 필드의 기본값 반환
현재 값이 없는 필드는 적절한 기본값과 함께 반환됩니다.
예시
Ops Manager에는 새로 검색된 호스트에 대한 통계가 없으므로 통계 관련 필드의 값은 모두 0입니다.
적절한 기본값이 없는 필드는 엔터티에서 생략됩니다.
예시
인증을 사용하지 않는 호스트는 반환된 엔터티에서
username
필드를 생략합니다.- 필드를 알파벳 순서로 반환
- Ops Manager 애플리케이션이 반환하는 JSON 문서의 필드는 알파벳 순서로 정렬되어 있습니다. 순서는 변경될 수 있습니다. 필드의 순서에 의존하지 마세요.
연결
각 리소스에는 하위 리소스 및/또는 관련 리소스에 대한 링크가 하나 이상 포함되어 있습니다.
예시
호스트에는 호스트가 속한 프로젝트, 호스트가 속한 복제본 세트 등에 대한 링크가 있습니다.
링크는 링크 관계 객체의 배열인 엔터티의 links
필드에 배치됩니다. 각 링크 관계에는 두 개의 필드가 있습니다.
필드 | 정의 |
---|---|
| Name (or type) of the relation. 이 중 상당수가 확장 관계 유형으로 간주되며 앞에 |
| 대상 URL. |
모든 엔터티에는 자체 URL 인 self
이라는 링크 관계가 하나 이상 포함되어 있습니다. 엔터티가 목록의 일부인 경우(즉, 프로젝트의 모든 호스트를 요청하는 경우) 여기에는 self
링크 관계만 포함됩니다.
예시
다음은 몇 가지 링크가 있는 host
리소스의 일부입니다.
1 { 2 "rel": "http://mms.mongodb.com/project", 3 "href": "https://cloud.mongodb.com/api/public/v1.0/projects/xxx" 4 "id": "xxx", 5 "projectId": "yyy", 6 "hostname": "mongodb.example.com", 7 "port": 27017, 8 "links": [ 9 { 10 "rel": "self", 11 "href": "https://<ops-manager-host>/api/public/v1.0/projects/xxx/hosts/yyy" 12 }, 13 { 14 "rel": "http://mms.mongodb.com/project", 15 "href": "https://<ops-manager-host>/api/public/v1.0/projects/xxx" 16 } 17 ] 18 }
자세한 내용은 웹 연결 사양 을 참조하세요. .
참고
웹 링크 사양 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
기본적으로 Ops Manager가 반환하는 JSON 에서 불필요한 공백은 제거됩니다. 깔끔하게 출력된 JSON 을 요청하려면 요청에 pretty=true
쿼리 매개변수를 추가하기만 하면 됩니다.
curl --user '{PUBLIC-KEY}:{PRIVATE-KEY}' --digest \ --header 'Accept: application/json' \ --include \ --request GET "{opsManagerHost}:{Port}/api/public/v1.0?pretty=true"
참고
이 문서의 모든 예제는 명확성을 위해 깔끔하게 인쇄된 JSON 을 표시하지만, 일부 예제 URL 에는 이 추가 쿼리 매개변수가 포함되어 있지 않을 수 있습니다.
응답 코드
응답은 다음을 포함한 표준 HTTP 응답 코드를 활용합니다.
코드 | 의미 | 참고 사항 |
---|---|---|
200 | 확인 | 요청이 성공했습니다. 이는 성공적인 |
201 | 생성됨 | 새 리소스가 생성되었습니다. 이는 성공적인 |
202 | 수락됨 | 비동기 작업에 대한 요청이 수락되었습니다. |
400 | 잘못된 요청 | 클라이언트 요청에 문제가 있습니다. |
401 | 승인되지 않음 | 인증이 필요하지만 요청에 포함되지 않았습니다. 일반적으로 이는 다이제스트 인증 정보가 요청에서 생략되었거나, 제공된 자격 증명이 올바르지 않거나, 지정된 API 키와 연결된 사용자가 요청된 리소스에 액세스할 수 없음을 의미합니다. |
403 | Forbidden | 지정된 리소스에 대한 액세스가 허용되지 않습니다. |
404 | 찾을 수 없습니다. | 요청된 리소스가 존재하지 않습니다. |
405 | 허용되지 않는 메서드 | 지정된 리소스에 대해 HTTP 메서드가 지원되지 않습니다. 각 리소스는 HTTP 메서드의 하위 집합만 지원할 수 있다는 점에 유의하세요. 예를 예시, 루트 리소스 를 |
409 | 충돌 | 이는 일반적으로 기존 엔터티가 해당 속성에 대해 동일한 값을 가진 경우 고유한 엔터티의 속성을 만들거나 수정하라는 요청에 대한 응답입니다. 예를 예시 기존 프로젝트 와 동일한 이름으로 프로젝트를 프로젝트 려고 하면 요청 이 실패합니다. |
5xx | 다양한 서버 오류 | 예기치 않은 문제가 발생했습니다. 나중에 다시 시도하고 Ops Manager 지원팀에 알리는 것이 좋습니다. |
오류
요청 결과에 오류가 발생하면 응답 본문에 무엇이 잘못되었는지에 대한 추가 세부 정보가 포함된 JSON 문서가 포함됩니다. 문서에는 다음과 같은 5개의 필드가 있습니다.
필드 | 데이터 유형 | 정의 |
---|---|---|
| 문자열 | API 요청 오류에 대한 사람이 읽을 수 있는 설명입니다. |
| integer | HTTP 상태 코드. |
| 문자열 | Ops Manager 관리 API 오류 코드 에 표시된 대로 API 요청 오류를 나타내는 명명된 상수입니다. |
| 문자열 배열 | API 요청에서 전달된 매개변수 목록입니다. |
| 문자열 | HTTP 상태 코드 정의. |
예시
Ops 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 }
코드 목록을 검토하려면 Ops Manager 관리 API 오류 코드를 참조하세요.
인증
앞서 언급했듯이 MongoDB Ops Manager API 는 HTTP 다이제스트 인증을 사용합니다. 다이제스트 인증에 대한 자세한 내용은 이 문서의 범위를 벗어나지만, 기본적으로 논스( nonce) 라는 서버 생성 고유 값을 사용하여 해시되는 사용자 이름과 비밀번호가 필요합니다. 사용자 이름은 등록된 MongoDB Ops Manager 계정의 사용자 이름이고, 비밀번호는 해당 계정과 연결된 공개 API 키 입니다.
다음 사항에 유의하세요.
서버에서 생성한 논스는 요청을 인증하기 위해 서버로 다시 보내기 전에 클라이언트가 사용자 이름과 비밀번호를 해시하는 데 사용됩니다. 논스는 다이제스트 인증 사양에 따라 짧은 시간 동안만 유효합니다. 이는 재생 공격을 방지하기 위한 것이므로 논스를 캐시하여 영구적으로 사용할 수 없습니다.
일부 리소스 메서드는 훨씬 더 강력한 보안이 필요하며, 나열된 IP 주소에서만 리소스에 대한 액세스를 허용하는 액세스 목록 으로 추가 보호됩니다. 각 사용자는 리소스에 대한 액세스를 허용하는 IP 주소의 액세스 목록을 자체적으로 구성합니다.
Ops Manager 애플리케이션에는 역할 이라는 개념이 있으며, 이를 통해 사용자가 수행할 수 있는 작업을 보다 세밀하게 제어할 수 있습니다. API 리소스는 동일한 권한 부여 규칙을 시행하므로 API 키로 액세스할 수 있는 리소스와 메서드는 연결된 사용자에게 부여된 역할에 따라 관리됩니다.
예시
호스트를
DELETE
하려면 요청에 사용된 API 키를 소유한 사용자가 호스트가 속한 프로젝트에서Project Monitoring Admin
또는Project Owner
이어야 합니다.다음 형식의 URL을 통해 알 수 있듯이 많은 리소스가 프로젝트(이전에는 그룹 )에 연결되어 있습니다.
/api/public/v1.0/groups/{PROJECT-ID}/ 이러한 리소스의 경우 API 키에 연결된 사용자는 프로젝트의 구성원 이거나
GLOBAL
역할 중 하나에 할당되어야 합니다. 그렇지 않으면 Ops Manager 애플리케이션이 HTTP 401 오류로 응답합니다.
자동화
최신 계획 리소스의 자동화 구성 리소스 및 자동화 상태 가져오기는 프로젝트의 배포를 수정하고 배포 상태를 검색할 수 있는 엔드포인트를 제공합니다. 새 자동화 구성 을 Ops Manager로 전송하여 배포를 수정할 수 있습니다. 자동화 구성에서는 배포할 MongoDB 프로세스를 설명하고 구성합니다. Ops Manager는 이를 배포의 " 목표 상태 " 라고 합니다. API 를 통해 새 자동화 구성을 제출하면 자동화는 목표 상태에 일치하도록 시스템의 현재 상태를 조정합니다.
중요
API 에는 동시 수정을 방지하는 보호 기능이 없습니다. 두 명의 관리자가 모두 현재 버전을 기반으로 하는 구성으로 시작하여 직접 수정한 다음 수정 사항을 제출하는 경우 나중에 수정한 것이 우선합니다.
추가 정보
Ops Manager 공개 API 에서 사용할 수 있는 모든 리소스에 대한 전체 참고 자료는 Ops Manager 관리 API 리소스 를 참조하세요.