Docs Menu
Docs Home
/ /
Data API

Puntos finales de la API de datos

La API de datos permite leer y escribir datos de forma segura mediante solicitudes HTTPS estándar. La API incluye puntos de conexión generados automáticamente, cada uno de los cuales representa una operación de MongoDB. Puede usar los puntos de conexión para crear, leer, actualizar, eliminar y agregar documentos en una fuente de datos de MongoDB.

Por ejemplo, esto PUBLICAR La solicitud almacena un documento en un clúster vinculado llamando al insertOne punto final:

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 obtener una referencia API detallada de todos los puntos finales disponibles, consulte la Referencia OpenAPI de la API de datos.

Nota

Los puntos finales de API de datos no son compatibles con puntos finales privados.

Puedes usar la API de datos para integrarla con cualquier aplicación o servicio que admita solicitudes HTTPS. Por ejemplo, podrías:

  • Consultar Atlas desde una aplicación móvil

  • Acceder a datos de prueba y registrar eventos en un flujo de trabajo de CI/CD

  • Integrar Atlas en una puerta de enlace API federada

  • Conectarse desde un entorno que actualmente no es compatible a través de un controlador MongoDB o Realm SDK

Una operación llamada a través de un punto final de API probablemente tardará más que la operación MongoDB correspondiente llamada a través de un controlador MongoDB conectado. Para casos de uso con alta carga y aplicaciones sensibles a la latencia, recomendamos conectarse directamente a su base de datos con un controlador MongoDB. Para obtener más información, consulte la documentación de los controladores MongoDB.

Los puntos finales de la API de datos de una aplicación comparten una URL base. Esta URL usa el ID de la aplicación para dirigirse de forma única a la aplicación y especifica la versión de la API de datos a la que se debe llamar. Cada punto final tiene una URL única que se forma añadiendo su ruta a la URL base de la aplicación.

Las aplicaciones distribuidas globalmente emplean el siguiente formato:

URL base del punto final (aplicaciones globales):
https://data.mongodb-api.com/app/<App ID>/endpoint/data/<API Version>

Los puntos finales de una aplicación implementada localmente utilizan una URL base específica para la región de implementación de la aplicación (porus-east-1.aws ejemplo,):

URL base del punto final (aplicaciones locales)
https://<Region>.<Cloud>.data.mongodb-api.com/app/<App ID>/endpoint/data/<API Version>

Puede configurar la API de datos para su aplicación desde la interfaz de usuario de App Services o implementando archivos de configuración con la CLI de App Services:

  1. Haga clic HTTPS Endpoints en el menú de navegación de la izquierda y luego seleccione la pestaña Data API.

  2. Habilita la API de datos para tu aplicación. Esto genera puntos finales que pueden acceder a cualquier fuente de datos de MongoDB vinculada a tu aplicación.

  3. Elija un método de autenticación y habilite los proveedores de autenticación.

  4. Elige un tipo de respuesta.

  5. Guardar la configuración de la API de datos.

  6. Configure permisos de acceso definiendo reglas para colecciones en sus fuentes de datos vinculadas para permitir que las solicitudes lean y escriban datos de forma segura.

  7. Guarde e implemente su aplicación.

  1. Obtenga la última versión de su aplicación.

    appservices pull --remote="<Your App ID>"
  2. Definir un archivo de configuración de API de datos.

    https_endpoints/data_api_config.json
    {
    "disabled": false,
    "versions": ["v1"],
    "can_evaluate": {},
    "return_type": <"JSON" | "EJSON">
    }
  3. Implementa tu aplicación.

    appservices push

Los puntos finales de la API de datos se ejecutan en el contexto de un usuario específico, lo que permite que su aplicación aplique reglas y valide esquemas de documentos para cada solicitud.

De forma predeterminada, los endpoints utilizan la autenticación de aplicaciones, que requiere que cada solicitud incluya las credenciales de uno de los usuarios de la aplicación, como una clave API o JWT. También puede configurar otros esquemas de autenticación personalizados para adaptarlos a las necesidades de su aplicación.

Para obtener ejemplos de cómo autenticar solicitudes, consulte Autenticar solicitudes de API de datos.

La autenticación de la aplicación requiere que los usuarios inicien sesión con un proveedor de autenticación que haya habilitado para su aplicación. Las solicitudes pueden incluir un token de acceso otorgado por el proveedor de autenticación o las credenciales con las que el usuario iniciaría sesión (por ejemplo, su clave API o correo electrónico y contraseña).

La autenticación de ID de usuario ejecuta todas las solicitudes como un único usuario de aplicación preseleccionado. Esto resulta útil si todas las solicitudes deben tener los mismos permisos, independientemente de quién haya llamado al endpoint.

Para seleccionar el usuario, especifique su ID de cuenta de usuario en la configuración de la API de datos de su aplicación.

http_endpoints/data_api_config.json
{
"run_as_user_id": "628e47baf4c2ac2796fc8a91"
}

La autenticación de scripts llama a una función para determinar el usuario de la aplicación al que se ejecuta una solicitud. Puede usar esto para implementar esquemas de autenticación y autorización personalizados.

La función debe devolver el ID de cuenta de un usuario de la aplicación existente como una cadena o { "runAsSystem": true } para ejecutar la solicitud como un usuario del sistema que tiene acceso completo a las API de CRUD y agregación de MongoDB y no se ve afectado por ninguna regla, rol o permiso.

Para definir la función, especifique el código fuente en la configuración de la API de datos de su aplicación.

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

Puede exigir a los usuarios autenticados que proporcionen información de autorización adicional en cada solicitud. El esquema de autorización para todos los puntos finales de la API de datos generados se define en la configuración de la API de datos.

Los endpoints admiten de forma nativa un conjunto de esquemas de autorización integrados que utilizan una cadena secreta para demostrar que la solicitud está autorizada. También puede definir un esquema de autorización personalizado que pueda usar junto con los esquemas integrados o en lugar de ellos.

Los puntos finales admiten los siguientes esquemas de autorización integrados:

Todos los usuarios autenticados están autorizados a llamar al punto final. Las solicitudes autenticadas no necesitan incluir información de autorización.

Los usuarios autenticados deben demostrar que están autorizados a llamar al punto final incluyendo una cadena específica como valor del parámetro de consulta secret.

Define la cadena en un secreto y hace referencia al secreto por nombre en la configuración del punto final.

http_endpoints/data_api_config.json
[
{
...,
"verification_method": "SECRET_AS_QUERY_PARAM",
"secret_name": "secret_verification_string"
}
]

Para saber cómo incluir el secreto en una solicitud,consulte Autorizar la solicitud.

Los usuarios autenticados deben demostrar que están autorizados a llamar al punto final incluyendo un encabezado Endpoint-Signature que contenga un código hexadecimal. Hash HMAC SHA-256 generado a partir del cuerpo de la solicitud y una cadena secreta.

Define la cadena en un secreto y hace referencia al secreto por nombre en la configuración del punto final.

Para saber cómo firmar sus solicitudes,consulte Autorizar la solicitud.

Puedes definir una expresión de autorización personalizada para determinar si se permite la ejecución de una solicitud autenticada entrante. La expresión se evalúa para cada solicitud y debe dar true como resultado para permitirla. Si da como false resultado, la solicitud no se autoriza y falla con un error. Las solicitudes que no superan la autorización no se contabilizan para el uso facturado de tu aplicación.

Las expresiones de autorización pueden usar variables como para %%user %%request autorizar según los datos del usuario que llama o para tomar decisiones según las características específicas de cada solicitud entrante.

Para definir un esquema de autorización personalizado, especifique la expresión en la configuración de la API de datos de su aplicación:

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

Los puntos finales pueden devolver datos en uno de dos formatos de datos, JSON o EJSON.

De forma predeterminada, los endpoints devuelven JSON, un formato de datos estándar ampliamente compatible con lenguajes y plataformas modernas. Sin embargo, JSON no puede representar todos los tipos de datos que se pueden almacenar en MongoDB y, en algunos casos, pierde información de tipo.

También puede configurar puntos finales para que devuelvan EJSON, que utiliza objetos JSON estructurados para representar completamente los tipos compatibles con MongoDB. Esto conserva la información de tipo en las respuestas, pero requiere que su aplicación comprenda cómo analizar y usar EJSON.

Tip

Los controladores oficiales de MongoDB incluyen métodos para trabajar con EJSON. También puedes descargar un analizador independiente como bson en npm.

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

La API de datos utiliza las reglas de acceso a datos de tu aplicación para determinar si un usuario puede leer y escribir datos. Para permitir que las solicitudes de la API de datos accedan a una colección específica, primero debes definir las reglas para dicha colección.

También puede configurar una lista de acceso IP para mayor seguridad.

La API de datos utiliza un sistema de control de versiones integrado para actualizar los endpoints con el tiempo, manteniendo la compatibilidad con versiones anteriores. Las solicitudes entrantes pueden especificar la versión de un endpoint que se usará en la URL de la solicitud, y la API de datos puede procesar cualquier versión que tenga habilitada.

Debe habilitar una nueva versión para que los usuarios puedan llamar a los endpoints con esa versión. Siempre puede habilitar la versión más reciente de la API de datos. Sin embargo, no puede habilitar una versión anterior después de que se haya publicado una versión más reciente.

Actualmente se admiten las siguientes versiones:

  • beta

  • v1

Puedes llamar a un punto final de la API de datos desde cualquier cliente HTTP estándar. Cada solicitud puede incluir encabezados de configuración y argumentos en el cuerpo de la solicitud.

Se requiere HTTP/1.1 o superior al realizar solicitudes.

Las solicitudes de API de datos especifican la versión de la API que se usará en la URL de la solicitud. Una solicitud puede especificar cualquier versión habilitada para la aplicación.

https://data.mongodb-api.com/app/<App ID>/endpoint/data/<API Version>

Las solicitudes de API de datos deben incluir un Content-Type encabezado para especificar el formato de datos utilizado en el cuerpo de la solicitud.

  • Utilice Content-Type: application/json para representar tipos JSON estándar en un cuerpo de solicitud de API de datos.

  • Utilice Content-Type: application/ejson para representar tipos JSON estándar y tipos EJSON adicionales en un cuerpo de solicitud de API de datos.

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 }

Una solicitud puede incluir un Accept encabezado para solicitar un formato de datos específico para el cuerpo de la respuesta, ya sea JSON o EJSON. Si una solicitud no incluye un Accept encabezado válido, la respuesta utiliza el formato de datos especificado en la configuración de la API de datos.

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

Si un punto final está configurado para usar la autenticación de aplicaciones, debe incluir un token de acceso de usuario válido o credenciales de inicio de sesión con cada solicitud.

En general, la autenticación de portador con un token de acceso ofrece mayor rendimiento y es más segura que los encabezados de credenciales. Utilice un token de acceso en lugar de encabezados de credenciales siempre que sea posible. El token permite ejecutar múltiples solicitudes sin tener que volver a autenticar al usuario. También permite enviar solicitudes desde un navegador web que implemente CORS.

Para usar un token de acceso, primero autentique al usuario mediante un proveedor de autenticación de App Services. Luego, obtenga el token de acceso devuelto por App Services e inclúyalo en el encabezado de autorización de la solicitud mediante un esquema de token de portador. Para obtener más información sobre cómo adquirir y usar un token de acceso,consulte Autenticación 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"
}
}'

Otra opción es incluir credenciales de inicio de sesión válidas para el usuario en las cabeceras de la solicitud.

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

No uses claves API en clientes orientados al usuario

Si se autentica desde un navegador u otra aplicación cliente, evite usar una clave API para iniciar sesión. En su lugar, utilice otro proveedor de autenticación que acepte las credenciales proporcionadas por el usuario. Nunca almacene localmente claves API ni otras credenciales confidenciales.

Dependiendo de la configuración de autorización de su API de datos, es posible que sus solicitudes deban incluir información de autorización adicional.

Todos los usuarios autenticados están autorizados a llamar al punto final. Las solicitudes autenticadas no necesitan incluir información de autorización.

Los usuarios autenticados deben demostrar que están autorizados a llamar al punto final incluyendo la cadena secreta del punto final como valor del parámetro de consulta secret.

Ejemplo

La siguiente solicitud curl utiliza la validación de parámetros de consulta secretos con la cadena 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" }
}'

Los usuarios autenticados deben demostrar que están autorizados a llamar al punto final incluyendo un Endpoint-Signature encabezado que contenga un hash HMAC SHA- codificado en hexadecimal256 generado a partir del cuerpo de la solicitud y la cadena secreta del punto final.

Endpoint-Signature: sha256=<hex encoded hash>

Puede utilizar la siguiente función para generar la firma de 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");
};

Ejemplo

El siguiente curl incluye un encabezado de firma de carga útil firmado con el 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" }
}'

Volver

Guía: Implementar una alternativa de Express.js a la API de datos Atlas

En esta página