Princípios de API pública
Nesta página
A API pública do Ops Manager segue os princípios da arquitetura REST para expor recursos internos que fornecem acesso programático aos recursos do Ops Manager.
A API tem as seguintes funcionalidades:
- Entidades JSON
- Todas as entidades são expressas em JSON.
- Acesso baseado em chave
- Cada MongoDB Ops Manager usuário ou aplicação MongoDB Ops Manager API MongoDB Ops Manager do MongoDB Ops que precisa se conectar ao deve gerar uma chave de antes de acessar a do .API
- Autenticação Digest
- Para garantir que sua chave de API pública nunca seja enviada pela rede, as solicitaçõesde API são autenticadas usando a Autenticação HTTP Digest.
- 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 de API de cada usuário do Ops Manager correspondem às permissões que suas funções do Ops 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 Ops Manager ou da API.- Lista de acesso à rede API
- A MongoDB Ops Manager API oferece suporte a API uma lista de acesso à por usuário API para restringir o IP acesso à a ou CIDR específicos. Para usuários MongoDB Ops Manager com uma lista de acesso de API não vazia, todo o acesso de API deve ser originado de um endereço IP na lista de acesso. Uma lista de acesso de API vazia concede acesso a todos os pontos de conexão de API de qualquer endereço IP , exceto aqueles que exigem explicitamente um endereço em uma lista de acesso.
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 ISO 8601 Cordas
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 MongoDB Ops 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 tentar atualizar uma entidade existente e incluir um campo que não pode ser modificado, o Ops 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 Ops Manager não tem estatísticas para um host recém-descoberto, portanto, todos os campos 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 campos nos documentos JSON que o aplicativo do Ops 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 "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 }
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 Ops Manager retorna. Para solicitar JSON bem impresso, basta acrescentar o parâmetro de query pretty=true
a qualquer solicitação:
curl --user '{USERNAME}:{APIKEY}' --digest \ --header 'Accept: application/json' \ --include \ --request GET "{opsManagerHost}:{Port}/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 Suporte do Ops 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 que representa o erro de solicitação de API , conforme mostrado em Códigos de erro da API de administração do Ops Manager. |
parameters | array de strings | Lista de parâmetros passados na solicitação de API . |
reason | string |
Exemplo
O Ops 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 Ops Manager.
Autenticação
Como mencionado anteriormente, a do MongoDB Ops Manager API usa HTTP a Autenticação Digest. Os detalhes da autenticação digest estão além do escopo deste documento, mas ela requer essencialmente um nome de usuário e uma senha que são criptografados usando um valor exclusivo gerado pelo servidor chamado nonce. O nome de usuário é o nome de usuário de uma conta registrada do MongoDB Ops Manager , e a senha é uma chave de API pública associada a essa conta.
Tenha em mente os seguintes pontos:
O nonce gerado pelo servidor é usado pelo cliente para fazer o hash do nome de usuário e da senha antes de enviá-los de volta ao servidor para autenticar uma solicitação. O nonce só é válido por um curto período de tempo, de acordo com a especificação da autenticação digest. This is to prevent replay attacks, so you cannot cache a nonce and use it forever.
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.
O aplicativo Ops Manager tem um conceito de roles, que permitem um controle mais preciso das operações que um usuário pode executar. Os recursos da API também impõem as mesmas regras de autorização, portanto, os recursos e métodos que podem ser acessados por uma chave de API são regidos pelas funções concedidas ao usuário associado.
Exemplo
Para
DELETE
um host, o usuário que possui a chave de API usada para fazer a solicitação deve ser umProject Monitoring Admin
ouProject Owner
no projeto ao qual o host pertence.Muitos recursos estão vinculados a um projeto (anteriormente conhecido como grupo), conforme evidenciado pelas URLdo seguinte formato:
/api/public/v1.0/groups/{PROJECT-ID}/ Para estes recursos, o usuário vinculado à chave de API deve ser um membro do projeto ou deve ser atribuído a uma das funções
GLOBAL
. Caso contrário, o aplicativo do Ops Manager responde com um erro HTTP 401.
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 Ops Manager. A configuração de automação é onde você descreve e configura os processos MongoDB a serem implementados. O Ops Manager refere-se a isso como o "estado do objetivo" 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á.
Informações adicionais
Consulte Recursos da API de administração do Ops Manager para obter uma referência completa de todos os recursos disponíveis na API pública do Ops Manager .