Menu Docs
Página inicial do Docs
/
MongoDB Ops 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
  • Informações adicionais

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

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.

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 ISO 8601 Cordas

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 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:

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 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.

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.

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 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.

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 Suporte do Ops 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 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.

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 um Project Monitoring Admin ou Project 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.

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á.

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 .

Voltar

API