Menu Docs
Página inicial do Docs
/ /
Serviços Atlas App
/

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.

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.

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:

URL Base do Endpoint (Aplicações Globais):
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):

URL Base do Endpoint (Aplicações Locais)
https://<Region>.<Cloud>.data.mongodb-api.com/app/<App ID>/endpoint/data/<API Version>

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:

  1. Clique em HTTPS Endpoints no menu de navegação esquerdo e selecione a guia Data API .

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

  3. Escolha um método de autenticação e habilite os provedores de autenticação.

  4. Escolha um tipo de resposta.

  5. Salve a configuração do Data API.

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

  7. Salve e implante sua aplicação.

  1. Puxe a versão mais recente do seu aplicativo.

    appservices pull --remote="<Your App ID>"
  2. 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">
    }
  3. Implemente seu aplicativo.

    appservices push

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.

http_endpoints/data_api_config.json
{
"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.

http_endpoints/data_api_config.json
[
{
...,
"run_as_user_id_script_source": "exports = () => {return \"628e47baf4c2ac2796fc8a91\"}"
}
]

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.

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.

http_endpoints/data_api_config.json
[
{
...,
"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.

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:

http_endpoints/data_api_config.json
{
...,
"can_evaluate": {
"%%request.requestHeaders.x-secret-key": "my-secret"
}
}

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.

https_endpoints/data_api_config.json
{
"return_type": "JSON"
}
https_endpoints/data_api_config.json
{
"return_type": "EJSON"
}

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.

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

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.

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>

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 }

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"
}

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.

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" }
}'

Voltar

Suspensão da API de dados e HTTPS endpoints