Endpoints da Data API [obsoletos]
Nesta página
- Quando usar a API de dados
- URL base
- Configurar a API de dados
- Autenticação
- Autorização
- Tipo de resposta
- Permissões de acesso
- Versões da API
- Chame um endpoint da API de dados
- Escolha uma versão da API
- Especificar o Formato dos Dados da Solicitação
- Escolher um Formato de Dados de Resposta
- Autenticar a Solicitação
- Autorizar a Solicitação
A API de dados permite que você leia e escreva dados com segurança usando requisições HTTPS padrão. A API inclui pontos de conexão gerados automaticamente que cada um representa uma operação MongoDB. Você pode usar os pontos de conexão para criar , ler, atualizar, excluir e agregar documentos em uma fonte de dados MongoDB.
Por exemplo, esta{ a solicitação armazena um documento em um cluster vinculado chamando o insertOne
endpoint :
curl -s "https://data.mongodb-api.com/app/myapp-abcde/endpoint/data/v1/action/insertOne" \ -X POST \ -H "Content-Type: application/ejson" \ -H "Accept: application/json" \ -H "apiKey: TpqAKQgvhZE4r6AOzpVydJ9a3tB1BLMrgDzLlBLbihKNDzSJWTAHMVbsMoIOpnM6" \ -d '{ "dataSource": "mongodb-atlas", "database": "learn-data-api", "collection": "hello", "document": { "text": "Hello, world!" } }'
{ "insertedId": "5f1a785e1536b6e6992fd588" }
Para obter uma referência detalhada da API de todos os pontos de conexão disponíveis, consulte a Referência da API de dados OpenAPI.
Observação
Não há suporte para endpoints de Data API em endpoints privados.
Quando usar a API de dados
Você pode utilizar a API de dados para integrar com qualquer aplicação ou serviço que suporte requisições HTTPS. Por exemplo, você pode:
consultar o Atlas a partir de um aplicativo móvel
acessar dados de teste e registrar eventos em um fluxo de trabalho de CI/CD
integrar o Atlas em um gateway de API federado
conectar de um ambiente que atualmente não é aceito por um MongoDB Driver ou Realm SDK
Uma operação chamada por meio de um endpoint de API provavelmente levará mais tempo do que a operação correspondente do MongoDB chamada por meio de um driver do MongoDB conectado. Para casos de uso de alta carga e aplicativos sensíveis à latência, recomendamos conectar-se diretamente ao seu banco de dados com um driver do MongoDB. Para saber mais, acesse a documentação dos drivers do MongoDB.
URL base
Os pontos de conexão da API de dados em uma aplicação compartilham uma URL base. A URL usa seu ID da aplicação para apontar exclusivamente para sua aplicação e especifica qual versão da API de dados chamar. Cada ponto de conexão tem uma URL exclusiva formada pela adição da rota do ponto de conexão para a URL base de sua aplicação.
Aplicações implantadas globalmente utilizam o seguinte formato:
https://data.mongodb-api.com/app/<App ID>/endpoint/data/<API Version>
Os pontos de extremidade em um aplicativo implantado localmente usam uma URL de base específica para a região do sistema do aplicativo (por exemplo us-east-1.aws
):
https://<Region>.<Cloud>.data.mongodb-api.com/app/<App ID>/endpoint/data/<API Version>
Configurar a API de dados
Você pode configurar a API de dados para sua aplicação na UI do App Services ou implantando arquivos de configuração com a App Services CLI:
Clique em HTTPS Endpoints no menu de navegação esquerdo e selecione a guia Data API .
Ative a API de dados para sua aplicação. Isso gera pontos de conexão que podem acessar qualquer fonte de dados MongoDB vinculada à sua aplicação.
Escolha um método de autenticação e habilite os provedores de autenticação.
Escolha um tipo de resposta.
Salve a configuração do Data API.
Configure as permissões de acesso definindo regras para coleções em suas fontes de dados vinculadas para permitir que as solicitações leiam e gravem dados com segurança.
Salve e implante sua aplicação.
Puxe a versão mais recente do seu aplicativo.
appservices pull --remote="<Your App ID>" Defina um arquivo de configuração da Data API .
https_endpoints/data_api_config.json{ "disabled": false, "versions": ["v1"], "can_evaluate": {}, "return_type": <"JSON" | "EJSON"> } Implemente seu aplicativo.
appservices push
Autenticação
Os pontos de conexão da API de dados são executados no contexto de um usuário específico, o que permite à sua aplicação impor regras e validar esquemas de documento para cada um solicitação.
Por padrão, os endpoints usam a Autenticação de Aplicativo, que exige que cada solicitação inclua credenciais para um dos usuários do aplicativo, como uma chave API ou JWT. Você também pode configurar outros esquemas de autenticação personalizados para atender às necessidades do seu aplicativo.
Para ver exemplos de como autenticar solicitações, consulte Autenticar Solicitações de API de Dados.
A autenticação do aplicativo exige que os usuários façam login com um fornecedor de autenticação que você habilitou para sua aplicação. As solicitações podem incluir um token de acesso concedido pelo fornecedor de autenticação ou as credenciais com as quais o usuário faria login (por exemplo, a chave API ou o e-mail e a senha deles).
A autenticação do ID do usuário executa todas as solicitações como um único usuário de aplicação pré-selecionado. Isso é útil se todas as solicitações tiverem as mesmas permissões, independentemente de quem chamou o endpoint.
Para selecionar o usuário, especifique o ID da conta de usuário na configuração da Data API do seu aplicativo.
{ "run_as_user_id": "628e47baf4c2ac2796fc8a91" }
A autenticação de script chama uma função para determinar qual usuário do aplicação um pedido é executado. Você pode usar isso para implementar esquemas de autenticação e autorização personalizados.
A função deve retornar um ID da conta de um usuário do aplicação existente como uma string ou { "runAsSystem": true }
para executar a solicitação como um usuário do sistema que tenha acesso total às APIs de Agregação e CRUD do MongoDB e não é afetado por nenhuma regra, função ou permissão.
Para definir a função, especifique o código-fonte na configuração da Data API do seu aplicativo.
[ { ..., "run_as_user_id_script_source": "exports = () => {return \"628e47baf4c2ac2796fc8a91\"}" } ]
Autorização
Você pode exigir que os usuários autenticados forneçam informações de autorização adicionais em cada solicitação. Você define o esquema de autorização para todos os endpoints de API de dados gerados em sua configuração da API de dados.
Os endpoints oferecem suporte nativo a um conjunto de esquemas de autorização internos que usam uma string secreta para provar que a solicitação está autorizada. Você também pode definir um esquema de autorização personalizado que pode ser usado junto com os esquemas integrados ou em vez deles.
Esquemas de autorização integrados
Os endpoints suportam os seguintes esquemas de autorização integrados:
Todos os usuários autenticados estão autorizados a chamar o endpoint. Solicitações autenticadas não precisam incluir informações de autorização.
Os usuários autenticados devem provar que estão autorizados a chamar o endpoint, incluindo uma string específica como valor do parâmetro de query secret
.
Você define a string em um segredo e faz referência ao segredo por nome na configuração do endpoint.
[ { ..., "verification_method": "SECRET_AS_QUERY_PARAM", "secret_name": "secret_verification_string" } ]
Para saber como incluir o segredo em uma solicitação, consulte Autorizar a solicitação.
Os usuários autenticados devem provar que estão autorizados a chamar o endpoint incluindo um cabeçalho Endpoint-Signature
que contém um hash HMAC SHA-256 codificado em hexadecimal gerado a partir do corpo da solicitação e uma string secreta.
Você define a string em um segredo e faz referência ao segredo por nome na configuração do endpoint.
Para saber como assinar suas solicitações, consulte Autorizar a solicitação.
Esquemas de autorização personalizados
Você pode definir uma expressão de autorização personalizada para determinar se uma solicitação autenticada de entrada tem permissão para ser executada. A expressão é avaliada para cada solicitação e deve avaliar como true
para permitir a solicitação. Se a expressão avaliar como false
, a solicitação não é autorizada e ocorre uma falha. As solicitações que passam por uma falha na autorização não são contabilizadas no uso para o faturamento da sua aplicação.
As expressões de autorização podem usar variáveis como %%user
para autorizar com base nos dados do usuário que chama ou %%request
para tomar decisões com base nas especificidades de cada solicitação de entrada.
Para definir um esquema de autorização personalizado, especifique a expressão na configuração da API de dados de sua aplicação:
{ ..., "can_evaluate": { "%%request.requestHeaders.x-secret-key": "my-secret" } }
Tipo de resposta
Os endpoints podem retornar dados em um dos dois formatos de dados, JSON ou EJSON.
Por padrão, os endpoints retornam JSON, que é um formato de dados padrão que é amplamente suportado em linguagens e plataformas modernas. No entanto, JSON não pode representar todos os tipos de dados que você pode armazenar no MongoDB e perde informações de tipo para alguns tipos de dados.
Você também pode configurar pontos de conexão para retornar EJSON, que usa objetos JSON estruturados para representar totalmente os tipos suportados pelo MongoDB. Isso preserva informações de tipo nas respostas, mas exige que seu aplicativo entenda como analisar e usar EJSON.
Dica
Os drivers oficiais do MongoDB incluem métodos para trabalhar com EJSON. Você também pode baixar um analisador autônomo como bson no npm.
{ "return_type": "JSON" }
{ "return_type": "EJSON" }
Permissões de acesso
O Data API usa as regras de acesso a dados da sua aplicação para determinar se um usuário pode ler e gravar dados. Para permitir que as solicitações do Data API acessem uma coleção específica, você deve primeiro definir regras para a coleção.
Você também pode configurar uma Lista de Acesso IP para segurança adicional.
Versões da API
O Data API usa um esquema de controle de versão interno para atualizar os endpoints ao longo do tempo, mantendo a compatibilidade com versões anteriores. As solicitações de entrada podem especificar qual versão de um endpoint usar na URL de solicitação e o Data API pode servir qualquer versão que você tenha habilitado.
Você deve habilitar uma nova versão antes que os usuários possam chamar pontos de conexão com essa versão. Você sempre pode habilitar a versão mais recente da API de dados. No entanto, você não pode habilitar uma versão mais antiga depois que uma versão mais recente tiver sido lançada.
As seguintes versões são atualmente suportadas:
beta
v1
Chame um endpoint da API de dados
Você pode chamar um endpoint do Data API de qualquer cliente HTTP padrão. Cada solicitação pode incluir cabeçalhos de configuração e argumentos no corpo da solicitação.
HTTP/1.1 ou superior é necessário ao fazer solicitações.
Escolha uma versão da API
As solicitações de API de dados especificam qual versão da API usar na URL da solicitação. Uma solicitação pode especificar qualquer versão que esteja habilitada para sua aplicação.
https://data.mongodb-api.com/app/<App ID>/endpoint/data/<API Version>
Especificar o Formato dos Dados da Solicitação
As solicitações do Data API devem incluir um cabeçalho Content-Type
para especificar o formato de dados usado no corpo da solicitação.
Utilize
Content-Type: application/json
para representar tipos JSON padrão em um corpo de solicitação da API de dados.Utilize
Content-Type: application/ejson
para representar tipos de JSON padrão e tipos de EJSON adicionais em um corpo de solicitação de API de dados.
curl -X GET \ https://data.mongodb-api.com/app/myapp-abcde/endpoint/data/v1/action/insertOne \ -H 'apiKey: <API Key>' \ -H 'Content-Type: application/ejson' \ -H 'Accept: application/ejson' \ --data-raw '{ "dataSource": "mongodb-atlas", "database": "learn-data-api", "collection": "hello", "document": { "_id": { "$oid": "629971c0d71aad65bd59c595" }, "greeting": "Hello, EJSON!", "date": { "$date": { "$numberLong": "1654589430998" } } } }'
{ "insertedId": { "$oid": "629971c0d71aad65bd59c595" } }
curl -X POST \ https://data.mongodb-api.com/app/myapp-abcde/endpoint/data/v1/action/updateOne \ -H 'apiKey: <API Key>' \ -H 'Content-Type: application/json' \ --data-raw '{ "dataSource": "mongodb-atlas", "database": "learn-data-api", "collection": "hello", "filter": { "greeting": "Hello, world!" }, "update": { "$set": { "greeting": "Hello, universe!" } } }'
{ "matchedCount": 1, "modifiedCount": 1 }
Escolher um Formato de Dados de Resposta
Uma solicitação pode incluir um cabeçalho Accept
para solicitar um formato de dados específico para o corpo da resposta, seja JSON ou EJSON. Se uma solicitação não incluir um cabeçalho Accept
válido, a resposta usará o formato de dados especificado em sua configuração da Data API.
curl -X GET \ https://data.mongodb-api.com/app/myapp-abcde/endpoint/data/v1/action/findOne \ -H 'apiKey: <API Key>' \ -H 'Content-Type: application/json' \ -H 'Accept: application/ejson' \ --data-raw '{ "dataSource": "mongodb-atlas", "database": "learn-data-api", "collection": "hello", "projection": { "greeting": 1, "date": 1 } }'
{ "_id": { "$oid": "629971c0d71aad65bd59c545"}, "greeting": "Hello, Leafie!", "date": { "$date": { "$numberLong": "1654589430998" } } }
curl -X POST \ https://data.mongodb-api.com/app/myapp-abcde/endpoint/data/v1/action/findOne \ -H 'apiKey: <API Key>' \ -H 'Content-Type: application/json' \ -H 'Accept: application/json' \ --data-raw '{ "dataSource": "mongodb-atlas", "database": "learn-data-api", "collection": "hello", "projection": { "greeting": 1, "date": 1 } }'
{ "_id": "629971c0d71aad65bd59c545", "greeting": "Hello, Leafie!", "date": "2022-06-07T08:10:30.998Z" }
Autenticar a Solicitação
Se um ponto de extremidade estiver configurado para usar a autenticação de aplicativo, você deve incluir um token de acesso de usuário válido ou credenciais de login com cada solicitação.
Em geral, a autenticação de portador com um token de acesso tem uma taxa de transferência mais alta e é mais segura do que os cabeçalhos de credenciais. Use um token de acesso em vez de cabeçalhos de credenciais quando possível. O token permite que você execute várias solicitações sem autenticar o usuário novamente. Ele também permite que você envie solicitações de um navegador da Web que imponha o CORS.
Para usar um token de acesso, primeiro autentique o usuário por meio de um fornecedor de autenticação do App Services. Em seguida, obtenha o token de acesso retornado pelo App Services e inclua-o no cabeçalho de autorização da solicitação usando um esquema de token de portador. Para obter mais informações sobre como adquirir e usar um token de acesso, consulte Autenticação de Token de Portador.
curl -s "https://data.mongodb-api.com/app/myapp-abcde/endpoint/data/v1/action/findOne" \ -X POST \ -H "Accept: application/json" \ -H "Authorization: Bearer $ACCESS_TOKEN" \ -d '{ "dataSource": "mongodb-atlas", "database": "sample_mflix", "collection": "movies", "filter": { "title": "The Matrix" } }'
Como alternativa, você pode incluir credenciais de login válidas para o usuário nos cabeçalhos de solicitação.
curl -s "https://data.mongodb-api.com/app/myapp-abcde/endpoint/data/v1/action/findOne" \ -X POST \ -H "Accept: application/json" \ -H "email: bob@example" \ -H "password: Pa55w0rd!" \ -d '{ "dataSource": "mongodb-atlas", "database": "sample_mflix", "collection": "movies", "filter": { "title": "The Matrix" } }'
curl -s "https://data.mongodb-api.com/app/myapp-abcde/endpoint/data/v1/action/findOne" \ -X POST \ -H "Accept: application/json" \ -H "apiKey: TpqAKQgvhZE4r6AOzpVydJ9a3tB1BLMrgDzLlBLbihKNDzSJWTAHMVbsMoIOpnM6" \ -d '{ "dataSource": "mongodb-atlas", "database": "sample_mflix", "collection": "movies", "filter": { "title": "The Matrix" } }'
curl -s "https://data.mongodb-api.com/app/myapp-abcde/endpoint/data/v1/action/findOne" \ -X POST \ -H "Accept: application/json" \ -H "jwtTokenString: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJteWFwcC1hYmNkZSIsInN1YiI6IjEyMzQ1Njc4OTAiLCJuYW1lIjoiSm9obiBEb2UiLCJleHAiOjIxNDU5MTY4MDB9.E4fSNtYc0t5XCTv3S8W89P9PKLftC4POLRZdN2zOICI" \ -d '{ "dataSource": "mongodb-atlas", "database": "sample_mflix", "collection": "movies", "filter": { "title": "The Matrix" } }'
Importante
Não use chaves de API em clientes direcionados ao usuário
Se você estiver autenticando de um navegador ou de outro aplicativo de cliente voltado para o usuário, evite usar uma chave API para se conectar. Em vez disso, use outro fornecedor de autenticação que tenha credenciais fornecidas pelo usuário. Nunca armazene chaves API ou outras credenciais sensíveis localmente.
Autorizar a Solicitação
Dependendo da configuração de autorização da Data API, suas solicitações podem precisar incluir informações adicionais de autorização.
Todos os usuários autenticados estão autorizados a chamar o endpoint. Solicitações autenticadas não precisam incluir informações de autorização.
Os usuários autenticados devem provar que estão autorizados a chamar o endpoint, incluindo a string secreta do endpoint como o valor do parâmetro de query secret
.
Exemplo
A seguinte solicitação do curl
utiliza validação de parâmetro de query secreta com a string secreta "12345"
:
curl -X POST \ https://data.mongodb-api.com/app/myapp-abcde/endpoint/data/v1/action/findOne?secret=12345 \ -H "Content-Type: application/json" \ -d '{ "dataSource": "mongodb-atlas", "database": "learn-data-api", "collection": "tasks", "filter": { "text": "Do the dishes" } }'
Os usuários autenticados devem provar que estão autorizados a chamar o endpoint incluindo um cabeçalho Endpoint-Signature
que contém um hash HMAC SHA-256 codificado em hexadecimal gerado a partir do corpo da solicitação e da string secreta do endpoint.
Endpoint-Signature: sha256=<hex encoded hash>
Você pode usar a seguinte função para gerar a assinatura da carga útil:
/** * Generate an HMAC request signature. * @param {string} secret - The secret validation string, e.g. "12345" * @param {object} body - The endpoint request body e.g. { "message": "MESSAGE" } * @returns {string} The HMAC SHA-256 request signature in hex format. */ exports = function signEndpointRequest(secret, body) { const payload = EJSON.stringify(body); return utils.crypto.hmac(payload, secret, "sha256", "hex"); };
Exemplo
O seguinte curl
inclui um cabeçalho de assinatura de carga assinado com o valor secreto 12345
:
curl -X POST \ https://data.mongodb-api.com/app/myapp-abcde/endpoint/data/v1/action/findOne \ -H "Content-Type: application/json" \ -H "Endpoint-Signature: sha256=769cd86855787f476afc8b0d2cf9837ab0318181fca42f45f34b6dffd086dfc7" \ -d '{ "dataSource": "mongodb-atlas", "database": "learn-data-api", "collection": "tasks", "filter": { "text": "Do the dishes" } }'