Princípios de API pública
Nesta página
- A autenticação OAuth 2.0 para acesso programático ao Cloud Manager está disponível como um recurso de visualização.
- O recurso e a documentação correspondente podem mudar a qualquer momento durante o período de Pré-visualização. Para usar a 2.0 autenticação OAuth, crie uma conta de serviço para usar em suas solicitações para a API pública do Cloud Manager .
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
Um usuário com a função
Project Read Only
não pode modificar nenhum recurso dentro desse projeto, seja por meio da interface do usuário do Cloud Manager ou da API.- 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.
Métodos deHTTP
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. |
JSON
Todas as entidades são representadas no JSON. As seguintes regras para solicitações e convenções de respostas se aplicam:
Regras de solicitação
- Aplique o cabeçalho do tipo de conteúdo correto
- Ao enviar JSON para o servidor via
POST
ouPUT
, 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
ouPATCH
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:
CampoDefiniçãodate
Segundos desde a Era UNIXincrement
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 }
Respostas de convenções
- 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.
Vinculação
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.
Listas
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 |
results | Conjunto de resultados, que é um array de documentos da entidade. |
links | Contém de uma a três relações de link:
|
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 }
Envelopes
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.
Pretty printing
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.
Códigos de resposta
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 |
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. |
Errors
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 | HTTP código de status. |
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.
Autenticação
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. | |
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.
Automação
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á.
Limitação de taxa
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.
À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.
À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.
À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
.
Informações adicionais
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 .