Chamando a API de administração do MongoDB Atlas: como fazer isso usando Node, Python e Ruby
Avalie esse Tutorial
O verdadeiro poder de um serviço totalmente gerenciado e hospedado na nuvem como o MongoDB Atlas é que você pode criar automaticamente arquiteturas de sistema de banco de dados totalmente novas, usando a API de serviços. Acesso à API de administração do MongoDB Atlas é relativamente simples e, uma vez desbloqueado, abre uma grande oportunidade para integrar e automatizar o gerenciamento de sistemas de banco de dados, da criação à exclusão. A API em si é uma REST API. Há controle de acesso baseado em função e você pode ter credenciais específicas do usuário ou do aplicativo para acessá-lo.
No entanto, há um pequeno detalhe que pode atrapalhar as pessoas. As credenciais precisam ser transmitidas usando o mecanismo de autenticação digest, e não a autenticação básica mais comum ou o uso de um token emitido. A autenticação Digest, em sua forma mais simples, aguarda uma respostaHTTP
401 Unauthorized
do endpoint da Web. Essa resposta vem com dados e o cliente envia uma forma criptografada do nome de usuário e da senha como um resumo e o servidor trabalha com isso.E é por isso que estamos aqui hoje: para mostrar como fazer isso com o mínimo de confusão em Python, Node e Ruby. Em cada exemplo, tentaremos acessar o URL base da API de administração do Atlas, que retorna um documento JSON sobre o nome, a construção e outros detalhes dos aplicativos subjacentes. Você pode encontrar todas as amostras de código no repositório dedicado do Github.
Para usar a API de administração do Atlas, você precisa de uma conta do MongoDB Atlas! Se você ainda não tiver um, siga o guiaIniciar com Atlas para criar sua conta e primeiro cluster.
O próximo requisito é a chave de API da organização. Você pode configurá-lo em duas etapas:
Crie uma chave de API na sua organização Atlas. Verifique se a chave tem a permissão do Proprietário da Organização . Adicione seu endereço IP à lista de acesso da API para a chave de API.
Em seguida, abra um novo terminal e exporte as seguintes variáveis de ambiente, em que
ATLAS_USER
é sua chave pública e ATLAS_USER_KEY
é sua chave privada.1 export ATLAS_USER=<public_key> 2 export ATLAS_USER_KEY=<private_key>
Está tudo configurado! Vamos ver como podemos usar a API de administração com Python, Node e Ruby.
Começamos com o exemplo mais simples e independente: Python.
Na versão Python, nos apoiamos na biblioteca
requests
para a maior parte do trabalho pesado. Podemos instalá-lo com pip
:1 python -m pip install requests
A implementação da autenticação digest em si é a seguinte:
1 import os 2 import requests 3 from requests.auth import HTTPDigestAuth 4 import pprint 5 6 base_url = "https://cloud.mongodb.com/api/atlas/v2/" 7 auth = HTTPDigestAuth( 8 os.environ["ATLAS_USER"], 9 os.environ["ATLAS_USER_KEY"] 10 ) 11 12 headers = { 13 'Accept': 'application/vnd.atlas.2023-01-01+json' # update date to desired API version 14 } 15 16 response = requests.get(base_url, auth = auth, headers=headers) 17 pprint.pprint(response.json())
Além de importar
requests
, também trazimos em HTTPDigestAuth
do móduloauth
das solicitações para lidar com a autenticação digest. A importaçãoos
está lá apenas para que possamos obter as variáveis de ambiente ATLAS_USER
e ATLAS_USER_KEY
como credenciais. Também adicionamos um cabeçalho para definir a versão da API de administração do Atlas que queremos. A importaçãopprint
é apenas para formatar nossos resultados.A parte crítica é a adição de
auth = HTTPDigestAuth(...)
à chamadarequests.get()
. Isso instala o código necessário para responder ao servidor quando ele solicitar o resumo.Se agora executarmos este programa...
…temos nossa resposta da API.
Para o Node.js, aproveitaremos o pacote
urllib
que oferece suporte à autenticação digest.1 npm install urllib
O código para a requisição HTTP do Node.js é o seguinte:
1 const urllib = require('urllib'); 2 const util = require('util'); 3 4 const baseUrl = 'https://cloud.mongodb.com/api/atlas/v2/'; 5 const { ATLAS_USER, ATLAS_USER_KEY } = process.env; 6 const options = { 7 digestAuth: `${ATLAS_USER}:${ATLAS_USER_KEY}`, 8 headers: { 9 'Accept': 'application/vnd.atlas.2023-01-01+json' // update date to desired API version 10 } 11 }; 12 13 urllib.request(baseUrl, options) 14 .then(({ data, res }) => { 15 if (res.statusCode !== 200) { 16 console.error(`Unexpected Status: ${res.statusCode}: ${res.statusText}`); 17 } else { 18 const jsonRes = JSON.parse(data); 19 console.log(util.inspect(jsonRes, { depth: null, colors: true })); 20 } 21 }) 22 .catch(error => console.error('Error occurred:', error));
Retirando de cima... primeiro exigimos e importamos o pacote
urllib
. Em seguida, extraímos as variáveisATLAS_USER
e ATLAS_USER_KEY
do ambiente do processo e as usamos para construir a chave de autenticação. Em seguida, adicionamos um cabeçalho para definir a versão da API de administração do Atlas que queremos. Por fim, enviamos a solicitação e tratamos da resposta na chamada de resposta passada.E estamos prontos para executar:
Vamos para a nossa linguagem final...
HTTParty é um Gem amplamente utilizado que é usado pela comunidade Ruby e Rails para executar operações HTTP. Felizmente, ele também suporta autenticação digest. Então, para começar a festa:
1 gem install httparty
Existem duas maneiras de usar o HTTParty. Um é criar um objeto que abstraia as chamadas, enquanto o outro é apenas chamar diretamente métodos no próprio HTTParty. Por brevidade, vamos fazer o último. Aqui está o código:
1 require 'httparty' 2 require 'json' 3 4 base_url = 'https://cloud.mongodb.com/api/atlas/v2/' 5 options = { 6 :digest_auth => { 7 :username=>ENV['ATLAS_USER'], 8 :password=>ENV['ATLAS_USER_KEY'] 9 }, 10 headers: { 11 'Accept' => 'application/vnd.atlas.2023-01-01+json' # update date to desired API version 12 } 13 } 14 15 } 16 17 result = HTTParty.get(base_url, options) 18 19 pp JSON.parse(result.body())
Exigimos as gems HTTParty e JSON primeiro. Em seguida, criamos um dicionário com nosso nome de usuário e chave, mapeados para a autenticação do HTTParty, e definimos uma variável para manter o URL base. Por fim, adicionamos um cabeçalho para definir a versão da API de administração do Atlas que queremos. Estamos prontos para fazer nossa solicitação GET agora e, no
options
(o segundo parâmetro da solicitação GET), passamos :digest_auth=>auth
para ativar o suporte a digest. Terminamos com JSON analisando o corpo resultante e fazendo uma impressão bonita. Coloque tudo junto e execute e obteremos:Neste artigo, aprenderam como chamar a API de administração do MongoDB Atlas usando autenticação digest. Tiramos proveito dos amplos ecossistemas de bibliotecas de Python, Node.js e Ruby e usamos as seguintes bibliotecas da comunidade de código aberto:
Solicitações para o Python urllib para JavaScript httparty para Ruby
Se o seu projeto exigir, você mesmo poderá implementar a autenticação digest seguindo a especificação oficial. Você pode se inspirar nas implementações nas bibliotecas mencionadas acima.
Além disso, você pode encontrar todas as amostras de código do artigo no Github.
Com a autenticação resolvida, lembre-se de ser rigoroso com a segurança da chave de API e certifique-se de revogar as chaves não utilizadas. Agora você pode explorar a própria API. Comece na documentação e veja o que você pode automatizar hoje.