Menu Docs
Página inicial do Docs
/
MongoDB Cloud Manager
/

Princípios de API pública

Nesta página

  • Métodos de HTTP
  • JSON
  • Vinculação
  • Listas
  • Envelopes
  • Pretty printing
  • Códigos de resposta
  • Errors
  • Autenticação
  • Automação
  • Limitação de taxa
  • Informações adicionais

A API Pública do Cloud Manager segue os princípios da arquitetura REST para expor recursos internos que fornecem acesso programático aos recursos do Cloud Manager.

Assim como acontece com as alterações feitas por meio da interface da web, as alterações feitas por meio da API estão sujeitas aos preços do Cloud Manager. Se você adicionar servidor e incorrer em cobranças, você precisa ter um cartão de crédito válido registrado no Cloud Manager ou poderá ter a sua conta bloqueada.

A API tem as seguintes funcionalidades:

Entidades JSON
Todas as entidades são expressas em JSON.
Interface navegável
Usando um mecanismo de vinculação consistente, você pode navegar por toda a API começando no recurso raiz e seguindo os links para recursos relacionados.
Controle de acesso do usuário

Os recursos da API de cada usuário do Cloud Manager correspondem às permissões que suas funções do Cloud Manager concedem.

Exemplo

Lista de acesso à rede API

A API do Cloud Manager pode proteger o acesso à API de administração do Cloud Manager por meio de uma lista de acesso da API. Esta lista restringe o acesso à API a endereços IP ou CIDR específicos. Cada chave de API tem sua própria lista de acesso à API de administração do Cloud Manager. Quando você cria uma nova organização usando a interface do usuário do Cloud Manager, o MongoDB Atlas habilita o requisito de lista de acesso à API por padrão.

Para saber mais, consulte (Opcional) Exigir uma Lista de Acesso API para sua organização.

Apenas HTTPS
Você pode acessar a API somente via HTTPS, o que garante que todos os dados enviados pela rede sejam totalmente criptografados usando TLS.

Todos os recursos aceitam um subconjunto destes métodos comuns de HTTP:

Método
Propósito
GET
Recupere a representação JSON de um recurso.
POST
Crie um novo recurso utilizando a representação de JSON fornecida.
PUT
Substitua um recurso pela representação de JSON fornecida.
PATCH
Atualize os campos especificados em um recurso utilizando a representação JSON fornecida.
DELETE
Remover um recurso.
HEAD
Recupere o cabeçalho de resposta sem a representação JSON do recurso.

Todas as entidades são representadas no JSON. As seguintes regras para solicitações e convenções de respostas se aplicam:

Aplique o cabeçalho do tipo de conteúdo correto
Ao enviar JSON para o servidor via POST ou PUT, certifique-se de especificar o cabeçalho de solicitação do tipo de conteúdo correto: Content-Type: application/json
Definir datas como strings ISO 8601

Ao enviar datas para o servidor (como parâmetros de consulta ou campos em POST ou PATCH entidades de solicitação), use datas formatadas de acordo com o ISO 8601 padrão. Se você não especificar um fuso horário, o Cloud Manager assumirá UTC. Inclua um designador de fuso horário para evitar qualquer ambiguidade.

Exemplo

  • 27 de setembro de 2018 é expresso como 2018-09-27.

  • 27 de setembro de 2018 às 16:00 EDT é expresso (com zona) como 2018-09-27T16:00-04:00.

Em alguns casos, um carimbo de data/hora é retornado como uma representação JSON de um carimbo de data/hora BSON, principalmente nos recursos de backup. Esta representação de um carimbo de data/hora BSON fornece um documento JSON como um objeto com dois campos:

Campo
Definição
date
Segundos desde a Era UNIX
increment
Um ordinal inteiro de 32 bits incrementado para operações dentro de um determinado segundo.

Exemplo

A terceira operação em 27 de setembro de 2018 às 16:00 EDT é expressa (com zona) como

{ date: 2018-09-27T16:00-04:00, increment: 3 }
Rejeita campos inválidos

Campo inválidos são rejeitados em vez de ignorados.

Exemplo

Você tenta criar uma nova entidade e digita incorretamente um dos campos, ou se você tenta atualizar uma entidade existente e incluir um campo que não pode ser modificado, o Cloud Manager responde com um código de status HTTP 400 e uma mensagem de erro informando qual campo foi inválido.

Retorna datas como 8601 ISO Cordas
Todas as datas são retornadas como ISO 8601-strings formatadas designadas em UTC.
Campo de etiquetas para desambiguar unidades

Os campos que contêm valores numéricos em uma unidade específica são nomeados de forma a desambiguar a unidade que está sendo usada.

Exemplo

O tempo de atividade de um host é retornado em milissegundos, então o nome do campo de entidade do host é uptimeMsec.

Retorna valores padrão para campos sem outros valores

Os campos que não possuem um valor atual são retornados com um valor padrão apropriado.

Exemplo

O Cloud Manager não tem estatísticas para um host recém-descoberto, portanto, todos os campo relacionados a estatísticas têm valor zero.

Os campos que não possuem um valor padrão razoável são omitidos da entidade.

Exemplo

Um host que não está usando autenticação omite o campo username da entidade retornada.

Retorna campos em ordem alfabética
Os campo nos documento JSON que o Cloud Manager retorna estão em ordem alfabética. A ordem pode mudar. Não dependa da ordem dos campos.

Cada recurso inclui um ou mais links para sub-recursos e/ou recursos relacionados.

Exemplo

Um host tem um link para o projeto ao qual pertence, o conjunto de réplicas ao qual pertence e assim por diante.

Os links são colocados no campo links de uma entidade , que é uma array de objetos de relação de link. Cada relação de link tem dois campos:

Campo
Definição
rel
Nome (ou tipo) da relação. Muitos deles são considerados Tipos de Relação de Extensão e são prefixados por http://mms.mongodb.com.
href
URL de destino .

Todas as entidades incluem pelo menos uma relação de link chamada self, que é simplesmente sua própria URL. Quando uma entidade faz parte de uma lista (ou seja, ao solicitar todos os hosts em um projeto), ela inclui apenas a relação de link self .

Exemplo

Esta é uma parte de um recurso host com alguns links:

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}

Para saber mais, consulte a Especificação de links da web.

Observação

Embora a Especificação de Link da Web descreve um formato para incluir links nos cabeçalhos de resposta HTTP , ele não é necessário. Para tornar a API facilmente navegável, ela inclui os links no corpo da resposta em vez de nos cabeçalhos de resposta.

Alguns recursos retornam uma lista de entidades.

Exemplo

Você pode solicitar uma lista de todos os hosts em um projeto.

Quando uma lista de entidades é esperada em uma resposta, os resultados são retornados em lote delimitados por dois query:

Campo
Definição
pageNum
Número da página (com base em 1). O padrão é 1 se não for especificado.
itemsPerPage
Número de itens a serem devolvidos por página, até um máximo de 500. O padrão é 100 se não for especificado.

A entidade de resposta contém três campos:

Campo
Definição
totalCount

Número total de itens em todo o conjunto de resultados.

Por exemplo, se um projeto tiver um total de 57 hosts e você fizer uma solicitação com pageNum=6 e itemsPerPage=10, então totalCount será 57.

results
Conjunto de resultados, que é um array de documentos da entidade.
links

Contém de uma a três relações de link:

  • previous para a página anterior de resultados (omitida para a primeira página);

  • next para a próxima página de resultados (mitida para a última página);

  • self para a página atual (sempre presente).

Se você fizer uma solicitação de uma lista de entidades e não houver resultados, a API responderá com um código de status HTTP 200 e uma array results vazia. Ela não responde com uma 404 nesse caso, pois a lista de entidades pode não estar vazia em algum momento no futuro.

Se você tiver solicitado uma lista de entidades em um contexto que não existe (ou seja, a lista de hosts para um projeto inexistente), isso resultará em um status de resposta HTTP 404.

Exemplo

Esta é uma resposta HTTP para a segunda página de 10 hosts em um projeto com um total de 57 hosts:

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}

Alguns clientes podem não conseguir acessar os cabeçalhos de resposta HTTP e/ou o código de status. Nesse caso, você pode solicitar que a resposta inclua um envelope, que é simplesmente uma camada adicional de informações no documento JSON que contém todos os detalhes relevantes que normalmente estariam nos cabeçalhos de resposta.

Por padrão, a API não inclui a resposta em um envelope. Para solicitar um, basta adicionar o parâmetro de query envelope=true.

Para respostas que contêm uma única entidade, o envelope contém dois campos:

Campo
Definição
status
Código de status HTTP .
content
Entidade solicitada.

Para respostas que contêm uma lista de entidades, já existe um envelope que envolve os resultados, portanto, especificar envelope=true como um query nesse caso apenas adiciona o campo status ao envelope existente.

Por padrão, os espaços em branco estranhos são removidos do JSON que o Cloud Manager retorna. Para solicitar JSON bem impresso, basta acrescentar o parâmetro de query pretty=true a qualquer solicitação:

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

Observação

Todos os exemplos neste documento mostram JSON bem impresso para maior clareza, embora alguns URLs de exemplo possam não conter esse parâmetro de query adicional.

As respostas utilizam os códigos de resposta HTTP padrão, incluindo:

Código
Significado
Notas
200
OK
A solicitação foi bem-sucedida. Esta é a resposta típica para uma solicitação de GET bem-sucedida.
201
Criado
Um novo recurso foi criado. Esta é a resposta típica para uma solicitação de POST bem-sucedida.
202
Aceito
Uma solicitação para uma operação assíncrona foi aceita.
400
Solicitação inválida
Algo estava errado com o pedido do cliente.
401
Não autorizado
A autenticação é necessária, mas não estava presente na solicitação. Normalmente, isso significa que as informações de autenticação digest foram omitidas da solicitação, as credenciais fornecidas estão incorretas ou o usuário associado à chave de API fornecida não tem permissão para acessar o recurso solicitado.
403
Proibido
O acesso ao recurso especificado não é permitido.
404
Não encontrado
O recurso solicitado não existe.
405
Método não permitido

O método HTTP não é suportado para o recurso especificado. Lembre-se de que cada recurso só pode oferecer suporte a um subconjunto de métodos HTTP.

Por exemplo, você não tem permissão para DELETE o recurso raiz .

409
Conflito

Normalmente, essa é a resposta a uma solicitação para criar ou modificar uma propriedade de uma entidade que é exclusiva quando uma entidade existente já existe com o mesmo valor para essa propriedade.

Por exemplo, se você tentar criar um projeto com o mesmo nome de um projeto existente , a solicitação falhará.

5xx
Vários erros do servidor
Algo inesperado deu errado. Tente novamente mais tarde e considere notificar o Cloud Manager.

Quando uma solicitação resulta em um erro, o corpo da resposta contém um documento JSON com detalhes adicionais sobre o que deu errado. O documento contém cinco campos:

Campo
Tipo de Dados
Definição
detail
string
Descrição legível por humanos do erro de solicitação da API .
error
inteiro
errorCode
string
Constante nomeada representando o erro de solicitação de API , conforme mostrado nos Códigos de erro da API de administração do Cloud Manager.
parameters
array de strings
Lista de parâmetros passados na solicitação de API .
reason
string

Exemplo

O Cloud Manager retorna este corpo de resposta para uma solicitação formatada incorretamente:

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}

Para revisar a lista de códigos, consulte Códigos de erro da API de administração do Cloud Manager.

A API do Cloud Manager usa um dos dois métodos para autenticar solicitações: chaves de API ou contas de serviço. Isso garante que as chaves e tokens de acesso que servem como nomes de usuário e senhas nunca sejam enviados pela rede. Para obter detalhes de uso,consulte Acesso programático ao Cloud Manager.

Chaves de API
Conta de serviço
Método legado de autenticação no Cloud Manager que usa autenticação digest HTTP.
Novo método de autenticação no Cloud Manager usando o protocolo OAuth 2.0 padrão do setor com o fluxo de Credenciais do Cliente. Atualmente em visualização.
As chavesde API têm duas partes: uma chave pública e uma chave privada. Essas duas partes têm a mesma função que um nome de usuário e uma senha quando você faz solicitações de API ao Cloud Manager.
Uma conta de serviço permite gerenciar permissões e criar tokens de acesso. Uma conta de serviço tem um ID de cliente e um segredo que funciona como um nome de usuário e uma senha para criar tokens de acesso. Um token de acesso permite fazer solicitações de API ao Cloud Manager.
O Cloud Manager faz o hash da chave pública e da chave privada usando um valor exclusivo chamado nonce. O nonce só é válido por um curto período de tempo, de acordo com a especificação do resumo HTTP. Isso é para evitar ataques de repetição, para que você não possa armazenar em cache um nonce e usá-lo para sempre.
Depois de criar uma conta de serviço, você usará o ID do cliente e o segredo para gerar um token de acesso, que autentica suas solicitações de API. Os tokens de acesso são válidos apenas por 1 hora (3600 segundos) de acordo com a especificação OAuth 2.0. A expiração de tokens de acesso impede ataques de repetição, onde um token de acesso vazado pode ser usado sem uma restrição de tempo.
As funções do Cloud Manager limitam quais operações as chaves de API podem executar. Você deve conceder funções às chaves de API, como faria com os usuários, para garantir que as chaves de API possam chamar os endpoints de API sem erros.
As funções do Cloud Manager limitam quais operações uma conta de serviço pode realizar com seu token de acesso. Você deve conceder funções às contas de serviço, como faria com os usuários, para garantir que o token de acesso possa chamar os endpoints da API sem erros.
O Cloud Manager vincula muitos recursos a um projeto. Muitos URL de recursos API seguem o formato /api/public/v1.0/groups/<PROJECT-ID>/. Para estes recursos, as chaves API devem ser um membro da organização que hospeda o projeto. Caso contrário, o Cloud Manager responde com um 401 erro.
O Cloud Manager vincula muitos recursos a um projeto. Muitos URL de recursos API seguem o formato /api/public/v1.0/groups/<PROJECT-ID>/. Para esses recursos, a conta de serviço deve ser membro da organização que hospeda o projeto. Caso contrário, o Cloud Manager responde com um 401 erro.
Cada chave de API pertence a apenas uma organização, mas você pode conceder acesso a chaves de API a qualquer quantidade de projetos nessa organização.
Cada conta de serviço pertence a apenas uma organização, mas você pode conceder acesso a uma conta de serviço a qualquer número de projetos nessa organização.

Alguns métodos de recursos exigem ainda mais segurança e são protegidos adicionalmente por listas de acesso que permitem o acesso ao recurso somente a partir dos endereços IP listados. Cada usuário configura sua própria lista de acesso de endereços IP que permitem acesso ao recurso.

Os recursos Recurso de Configuração de Automação e Obter Status de Automação do Plano Mais Recente fornecem endpoints que permitem modificar o sistema de um projeto e recuperar o status do sistema. Você pode modificar um sistema enviando uma nova configuração de automação para o Cloud Manager. A configuração de automação é onde você descreve e configura os processos MongoDB a serem implementados. Cloud Manager chama isso de "estado de meta" do sistema. Quando você envia uma nova configuração de automação por meio da API, as automações ajustam o estado atual do sistema para corresponder ao estado do objetivo.

Importante

Não há proteção na API para evitar modificações simultâneas. Se dois administradores começarem com uma configuração baseada na versão atual, fizerem suas próprias modificações e, em seguida, enviarem suas modificações, a modificação posterior vencerá.

Alguns recursos estão sujeitos a limitação de taxa.

Para recursos com taxa limitada, o Cloud Manager permite até 100 solicitações por minuto por projeto. Lembre-se de que uma Public API Key é atribuída a um usuário do Cloud Manager, mas esse usuário pode acessar vários projeto.

Exemplo

Considere dois usuários: A e B.

O usuário A pertence ao projeto X e o usuário B pertence aos projetos X e Y.

  1. Às 13h00:00, o usuário A faz 50 solicitações para um recurso limitado de taxa no projeto X, todas concluídas às 13h00:20.

  2. Às 13h30, o usuário B tenta fazer 60 solicitações para um recurso limitado de taxa no projeto X.

    Como o usuário A já usou até 50 solicitações no minuto 13:00 para o projeto X, as últimas 10 solicitações que o usuário B tenta fazer são rejeitadas. No entanto, o usuário B pode fazer solicitações para um recurso de taxa limitada no projeto Y, pois cada projeto mantém um contador de solicitações separado.

  3. Às 13h01, as solicitações para o projeto X podem prosseguir, pois o contador de solicitações usado para a limitação de taxa é redefinido a cada minuto.

Se você exceder o limite de taxa, a API retornará um código de resposta HTTP 429 Too Many Requests .

Consulte Recursos da API de administração do Cloud Manager para obter uma referência completa de todos os recursos disponíveis na API pública do Cloud Manager .

Voltar

API