En el desarrollo de aplicaciones web, uno de los marcos más potentes y populares es FastAPI, especialmente cuando se busca construir una API REST rápida y eficiente. FastAPI es reconocido por su simplicidad, flexibilidad y alto rendimiento, lo que lo convierte en una excelente opción para desarrolladores que necesitan crear servicios web rápidamente sin comprometer la calidad del código.

El primer paso al comenzar un proyecto con FastAPI es asegurarse de que el entorno de desarrollo esté correctamente configurado. Esto incluye la instalación de Python, la creación de un entorno virtual y la instalación de las dependencias necesarias. Es fundamental tener Python instalado en su versión 3.11.7 o posterior, ya que FastAPI hace uso intensivo de las anotaciones de tipo y las características modernas del lenguaje. Además, para evitar posibles conflictos entre dependencias de distintos proyectos, se recomienda trabajar siempre dentro de un entorno virtual que permita gestionar de manera eficiente los paquetes y sus versiones.

Una vez que el entorno está listo, el siguiente paso es instalar FastAPI y un servidor ASGI como Uvicorn, que se encargará de ejecutar la aplicación. Con estos elementos, ya podemos comenzar a definir las rutas de nuestra API y los métodos HTTP correspondientes (GET, POST, PUT, DELETE). FastAPI ofrece una sintaxis clara y sencilla para definir estos puntos de entrada (endpoints), permitiendo especificar las solicitudes y las respuestas de manera eficiente.

Al crear una API REST básica con FastAPI, el desarrollador puede beneficiarse de su integración con herramientas como Pydantic para la validación de datos y la creación de modelos de entrada y salida. Pydantic permite definir de manera sencilla qué tipo de datos espera recibir y devolver la API, asegurando que la entrada cumpla con las expectativas y ofreciendo respuestas automáticas cuando los datos no sean válidos.

En cuanto al manejo de las solicitudes HTTP, FastAPI facilita el acceso a los parámetros de la URL, los cuerpos de las solicitudes (request bodies) y los encabezados, permitiendo que el desarrollador se enfoque en la lógica de negocio sin preocuparse por los detalles técnicos del manejo de solicitudes. Además, FastAPI ofrece funcionalidades avanzadas como la manipulación de cookies y encabezados, lo que resulta útil para gestionar sesiones o autenticaciones.

Al igual que con cualquier otro marco de trabajo, cuando se comienza a trabajar con FastAPI, es esencial entender cómo organizar el proyecto. A medida que la aplicación crece, se recomienda estructurar el código en módulos y routers para mantener la escalabilidad y facilidad de mantenimiento. FastAPI permite separar las rutas en diferentes archivos mediante la utilización de routers, lo que hace que el proyecto sea más organizado y modular.

Uno de los aspectos más interesantes de FastAPI es su compatibilidad con el paradigma de programación asincrónica (async/await), lo que permite manejar un mayor número de solicitudes concurrentes sin bloquear el hilo principal del servidor. Esta característica es especialmente importante cuando se trabaja con aplicaciones que requieren un alto rendimiento, como en servicios de streaming o procesamiento de datos en tiempo real.

Es importante resaltar que FastAPI está diseñado no solo para ser fácil de usar, sino también para ser seguro. A través de su integración con OAuth2, JWT y otras herramientas de autenticación y autorización, es sencillo agregar mecanismos de seguridad a nuestra API, asegurando que los usuarios solo puedan acceder a los recursos que les corresponden.

Para trabajar de manera efectiva con FastAPI, el desarrollador debe estar familiarizado con las herramientas de desarrollo, como los editores de código y los clientes REST. Visual Studio Code (VS Code) es una de las opciones más populares debido a su soporte para múltiples lenguajes y su integración con herramientas como MongoDB, lo que facilita tanto el desarrollo del backend como la gestión de bases de datos.

Además, utilizar un cliente REST, como Postman o Insomnia, facilita la prueba de los endpoints de la API, permitiendo simular solicitudes HTTP y verificar las respuestas antes de integrarlas en una aplicación más compleja.

Por último, es esencial que cada proyecto en Python tenga su propio entorno virtual para evitar conflictos entre dependencias y garantizar la reproducibilidad del proyecto. Para gestionar estos entornos virtuales, se puede utilizar herramientas como virtualenv, que crea un espacio aislado con todas las dependencias necesarias para un proyecto específico.

Consideraciones adicionales

Además de los aspectos técnicos ya mencionados, es crucial comprender la importancia de la documentación en el desarrollo de una API. FastAPI genera automáticamente documentación interactiva de la API utilizando OpenAPI, lo que permite que tanto los desarrolladores como los usuarios finales puedan explorar y probar los endpoints directamente desde el navegador. Esta característica es invaluable para mantener la transparencia y facilitar el mantenimiento del sistema.

Al trabajar con FastAPI, se debe tener en cuenta la importancia de los tests. Aunque FastAPI facilita el desarrollo rápido, la calidad del código no debe comprometerse. Es recomendable escribir pruebas unitarias y de integración para asegurar que cada componente de la API funcione correctamente y que el sistema como un todo sea robusto.

Otro punto clave es la gestión de errores y excepciones. FastAPI ofrece mecanismos de manejo de excepciones que permiten personalizar los mensajes de error y asegurarse de que la API responda de manera adecuada ante entradas incorrectas o situaciones inesperadas.

¿Cómo integrar autenticación, autorización y manejo de imágenes en una API con FastAPI?

La creación de una API que maneje usuarios y datos de manera segura y eficiente involucra varios elementos esenciales, como la autenticación, la autorización y la gestión de datos complejos, como imágenes. En este capítulo, se profundiza en la implementación de estas funcionalidades utilizando FastAPI, un moderno framework para la creación de aplicaciones web basadas en Python.

Una parte fundamental en el proceso de creación de una API es permitir que los usuarios puedan registrarse e iniciar sesión de manera segura. Esto se logra mediante la autenticación y autorización adecuadas. En el ejemplo de FastAPI, se utiliza MongoDB para gestionar los usuarios. Al crear un nuevo usuario, el proceso es sencillo: se inserta el modelo de usuario en la base de datos y se verifica si el usuario ya existe. Si no es así, se procede a la creación, de lo contrario, se devuelve un mensaje de error.

En cuanto al inicio de sesión, el proceso también es bastante directo. Al recibir el nombre de usuario y la contraseña, la API verifica que ambos sean correctos. Si alguna de las condiciones no se cumple, se devuelve un error 401 (no autorizado). Si las credenciales son correctas, se genera un token JWT que se devuelve al usuario junto con su nombre de usuario. Este token es esencial para mantener la sesión activa y poder acceder a recursos protegidos de la API.

La seguridad no solo se limita a la autenticación. La gestión de los datos de los usuarios y la protección de sus credenciales es igualmente importante. Utilizando un middleware para el manejo de CORS (Cross-Origin Resource Sharing), se permite que aplicaciones frontend en diferentes orígenes (por ejemplo, una aplicación en React) puedan comunicarse con la API backend sin problemas. La configuración básica de CORS en FastAPI es crucial, especialmente cuando se desarrollan aplicaciones que se ejecutan en diferentes puertos o dominios.

En cuanto a los datos complejos, como las imágenes, FastAPI ofrece un enfoque elegante mediante la integración con servicios de almacenamiento en la nube. Por ejemplo, al agregar un automóvil con una imagen, la API permite cargar la imagen a un servicio como Cloudinary, que maneja la subida y almacenamiento de imágenes de manera eficiente. Luego, la URL de la imagen es guardada en la base de datos y asociada con el modelo de automóvil correspondiente.

Una vez que la API está configurada para manejar tanto la autenticación como los datos complejos, es crucial implementar el endpoint /me, que permite al frontend verificar la validez del token JWT y obtener información sobre el usuario actual. Este tipo de endpoints son fundamentales para las aplicaciones modernas, que necesitan hacer uso constante de información dinámica sobre los usuarios.

Cuando todo está listo, el siguiente paso es la implementación de la API en un entorno de producción. Para ello, es necesario configurar adecuadamente los middleware y las dependencias para asegurar que la aplicación esté optimizada para su uso en la nube. Por ejemplo, en plataformas como Render.com, se realiza un proceso sencillo de despliegue que incluye la creación de un repositorio en GitHub y la configuración de los archivos necesarios para asegurar que las credenciales no se suban al repositorio público.

Es importante recordar que, antes de desplegar una API en producción, se deben realizar varias configuraciones de seguridad y optimización. Esto incluye el manejo adecuado de las credenciales, la protección de los datos sensibles de los usuarios y la configuración de CORS para permitir que solo las aplicaciones autorizadas puedan acceder a la API.

La implementación de middleware en FastAPI permite personalizar el manejo de las solicitudes y respuestas, mejorando la seguridad y la funcionalidad de la aplicación. El CORS, por ejemplo, debe ser configurado con precisión para evitar riesgos de seguridad al permitir que solo los orígenes de confianza puedan interactuar con la API.

En resumen, el desarrollo de una API completa que maneje usuarios, imágenes y datos sensibles requiere una integración cuidadosa de la autenticación, la autorización y las políticas de CORS. Además, es esencial implementar un manejo eficiente de los archivos y un despliegue adecuado para asegurar que la API sea segura y eficiente en su funcionamiento. La simplicidad de FastAPI y su capacidad para manejar tareas complejas de manera eficiente lo convierten en una opción excelente para construir aplicaciones web modernas y escalables.

¿Cómo implementar la funcionalidad de autenticación y formularios de inserción de datos en una aplicación con Next.js?

Una vez que se ha implementado completamente la funcionalidad de inicio de sesión, existen varios factores a tener en cuenta, comenzando por la duración de la cookie, que se establece a través de la propiedad maxAge en el archivo /src/lib.js, y que debe coincidir con la duración del JWT proporcionado por FastAPI en el backend. Es fundamental asegurarse de que ambas duraciones estén alineadas para evitar problemas de sesión.

La aplicación en cuestión no cuenta con una funcionalidad de registro de usuarios, ya que la idea es tener un número limitado de empleados, usuarios que se pueden crear directamente a través de la API. Como ejercicio, sería interesante desarrollar una página para registrar usuarios, utilizando el endpoint /users/register de FastAPI. Esto proporcionaría una mayor flexibilidad, permitiendo que nuevos usuarios sean dados de alta a través de un formulario.

En el siguiente paso, se completará la aplicación creando una página privada que solo será visible para usuarios autenticados y que permitirá a los vendedores introducir nuevos vehículos en el sistema. Este tipo de implementación es muy común en aplicaciones orientadas a la gestión de productos o servicios, donde se necesitan diferentes niveles de acceso según el rol del usuario.

Implementación de la página de inserción de vehículos

En esta sección, se va a crear un formulario para insertar nuevos vehículos. No se utilizará una librería de validación de formularios, ya que este tema fue cubierto previamente en el capítulo sobre el frontend de la aplicación, donde se explicó cómo utilizar la librería Zod para la validación. Sin embargo, en una aplicación real, sin duda se implementaría un sistema de validación similar para garantizar la integridad de los datos antes de enviarlos al servidor.

El proceso de creación de un anuncio para un coche se dividirá en varios pasos. En primer lugar, se creará un nuevo componente InputField en el archivo /src/components/InputField.js. Este componente será el encargado de renderizar los campos de entrada, lo que permite una mayor modularidad en la aplicación. A continuación se presenta un ejemplo básico de cómo debe lucir este componente:

javascript
const InputField = ({ props }) => { const { name, type } = props; return ( <div> <label>{name}</label>
<input type={type} name={name} />
</div> ); }; export default InputField;

Luego, se creará otro componente, CarForm, que será el formulario principal para insertar un coche. En este componente, se definirá un array con los campos necesarios, como marca, modelo, año, precio, etc. Aquí se utilizará el hook useFormState para gestionar el estado del formulario y realizar la acción de enviar los datos. El código podría lucir así:

javascript
import { createCar } from "@/actions";
import { useFormState } from "react-dom"; import InputField from "./InputField"; const CarForm = () => { let formArray = [ { name: "brand", type: "text" }, { name: "make", type: "text" }, { name: "year", type: "number" }, { name: "price", type: "number" }, { name: "km", type: "number" }, { name: "cm3", type: "number" }, { name: "picture", type: "file" } ]; const [state, formAction] = useFormState(createCar, {}); return ( <form onSubmit={formAction}> {formArray.map((item, index) => (
<InputField key={index} props={item} />
))}
<button type="submit">Guardar coche nuevo</button> </form> ); }; export default CarForm;

Este formulario permitirá a los usuarios autenticados insertar información sobre nuevos vehículos. La información será enviada al backend utilizando la acción createCar, que se define más adelante en el archivo actions.js. Esta acción se encargará de realizar una solicitud POST al servidor para almacenar la nueva información del coche en la base de datos.

Gestión de la autenticación y redirección

Para garantizar que solo los usuarios autenticados puedan acceder a la página privada donde se inserta el coche, se debe verificar el estado de la sesión en cada carga de la página. Esto se puede lograr mediante el uso del método getSession en el archivo src/app/private/page.js. Si la sesión no está presente o el JWT no es válido, el usuario será redirigido automáticamente a la página de inicio de sesión.

javascript
import { getSession } from "@/actions"; import { redirect } from "next/navigation"; const page = async () => { const session = await getSession(); if (!session?.jwt) { redirect("/login"); } return ( <div> <h1>Página privada</h1> <CarForm /> </div> ); }; export default page;

Creación de la acción para insertar el coche

Una vez que el formulario está listo y la página privada se encuentra protegida, se necesita una acción para manejar la solicitud POST que enviará los datos del coche al backend. Esta acción se definirá en el archivo actions.js, donde se utilizará el JWT de la sesión para autorizar la solicitud. Si todo sale bien, el servidor redirigirá al usuario a la página principal.

javascript
export const createCar = async (state, formData) => { const session = await getSession(); const jwt = session.jwt;
const result = await fetch(`${process.env.API_URL}/cars/`, {
method: "POST", headers: { Authorization: `Bearer ${jwt}`, }, body: formData, }); const data = await result.json(); if (result.ok) { redirect("/"); } else { return { error: data.detail }; } };

Consideraciones adicionales

Además de la funcionalidad de inserción de vehículos, es importante tener en cuenta la gestión del estado de la aplicación y la experiencia de usuario. El uso del hook useFormState proporciona una forma eficiente de manejar el estado del formulario sin necesidad de bibliotecas externas. Sin embargo, siempre es recomendable implementar validaciones de formularios en producción para garantizar la correcta validación de los datos antes de enviarlos al servidor.

En cuanto a la parte de la autenticación, es fundamental gestionar correctamente la expiración de los JWT y asegurar que las sesiones no permanezcan activas indefinidamente. Esto puede lograrse mediante la implementación de un sistema de revalidación automática o mediante un proceso de renovación de tokens.

¿Cómo diseñar y estructurar bases de datos en MongoDB?

MongoDB ofrece una gran flexibilidad al permitir el almacenamiento de datos en un formato que se ajusta a las necesidades de tu aplicación. Los documentos dentro de MongoDB son simplemente conjuntos ordenados de pares clave-valor. Es importante entender que los términos "clave" y "campo" se usan de forma intercambiable, pues ambos se refieren a lo mismo. Esta estructura es similar a las estructuras de datos en muchos lenguajes de programación; por ejemplo, en Python, esta estructura se asemeja a un diccionario, lo que la hace particularmente útil para aplicaciones web o de escritorio.

Las reglas básicas para crear documentos son simples: el nombre de la clave o campo debe ser una cadena de texto, con algunas excepciones que puedes revisar en la documentación oficial, y un documento no puede contener claves duplicadas. MongoDB es sensible a mayúsculas y minúsculas, lo que significa que "campo" y "Campo" se tratarían como dos claves diferentes.

Uno de los aspectos que distingue a MongoDB es su capacidad para admitir documentos anidados, lo que permite una representación jerárquica de los datos dentro de un mismo documento. De hecho, MongoDB permite hasta 100 niveles de anidamiento, lo que es más que suficiente para la mayoría de las aplicaciones. Este modelo no solo proporciona flexibilidad en la organización de los datos, sino que también facilita una estructura de datos más cercana al modelo JSON, que es ampliamente utilizado en el desarrollo de aplicaciones modernas.

Al cargar un conjunto de datos en MongoDB, como el dataset "sample_mflix" de MongoDB Atlas, te encontrarás con colecciones que contienen documentos representando películas. Cada documento puede incluir detalles como la trama, los géneros, el elenco y otros atributos importantes, todo dentro de un único documento. Este tipo de representación es eficiente y mejora la velocidad de acceso a los datos, ya que no es necesario realizar múltiples consultas a diferentes tablas o bases de datos, como sería el caso en los sistemas de bases de datos relacionales tradicionales.

Uno de los principales beneficios de MongoDB es la diversidad de tipos de datos que admite. A diferencia de los formatos de datos tradicionales, como JSON, MongoDB usa BSON (Binary JSON), que es una versión binaria optimizada y que permite una mayor variedad de tipos de datos. Algunos de los tipos más importantes que soporta MongoDB incluyen cadenas de texto, números enteros de 32 y 64 bits, números flotantes, valores booleanos, documentos anidados, arreglos, fechas y datos binarios. Estos tipos permiten una mayor flexibilidad a la hora de modelar los datos, lo que se traduce en una mejor adaptación a las necesidades específicas de las aplicaciones.

En cuanto a la organización de los datos dentro de MongoDB, los documentos se agrupan en colecciones. Una colección es un conjunto de documentos relacionados, similar a lo que sería una tabla en bases de datos relacionales. Aunque se pueden almacenar varios esquemas en una misma colección, lo más común es separar los datos en diferentes colecciones dentro de una base de datos. Esto no solo facilita la organización y el acceso a los datos, sino que también mejora el rendimiento de las consultas al permitir la indexación y optimización de cada colección de forma independiente.

La separación de los datos en colecciones tiene varias ventajas. Primero, permite una organización lógica de los datos, como tener una colección para usuarios, otra para productos y otra para órdenes. Esto facilita la gestión y consulta de los datos. Además, al tener colecciones separadas, puedes optimizar las consultas al indexar solo los campos necesarios para cada tipo de dato, lo que reduce el tiempo de búsqueda y mejora el rendimiento general. A nivel de hardware, almacenar documentos de tipos similares en una misma colección reduce la cantidad de tiempo que se tarda en acceder a los datos, ya que los discos duros o sistemas de almacenamiento pueden optimizar el acceso a esos bloques de datos.

Es importante tener en cuenta que, aunque MongoDB permite manejar múltiples bases de datos dentro de una misma instancia, lo más recomendado es mantener todos los documentos dentro de una sola base de datos. Esto se debe a que el manejo de múltiples bases de datos dentro de una instancia puede complicar el proceso de administración, y puede afectar la eficiencia del sistema en general.

En cuanto a los tipos de datos más comunes que encontrarás en MongoDB, es fundamental tener claro qué tipo de información se va a almacenar y cómo se relaciona entre sí. Por ejemplo, si vas a almacenar una lista de comentarios dentro de un documento, puedes aprovechar las capacidades de los arreglos en MongoDB, que te permitirán guardar de manera eficiente todos los comentarios junto con otros datos relevantes como el usuario y la fecha de publicación.

Aunque MongoDB ofrece una gran flexibilidad, es importante considerar la complejidad de tu aplicación. Un diseño adecuado de la base de datos debe equilibrar la flexibilidad con la eficiencia en el acceso a los datos. Si bien MongoDB facilita una gran variedad de opciones de modelado de datos, una estructura bien pensada y una correcta elección de tipos de datos te ayudarán a obtener el máximo rendimiento.

A la hora de diseñar una base de datos en MongoDB, no solo se trata de elegir el tipo adecuado de documento o colección, sino también de pensar en la escalabilidad y la facilidad de mantenimiento a largo plazo. Tener una estructura coherente y bien organizada no solo facilitará las consultas, sino que también hará que tu aplicación sea más fácil de desarrollar y mantener a medida que crece.

¿Cómo configurar y gestionar una base de datos MongoDB de manera eficiente?

Una vez comprendidos los términos básicos, conceptos y la estructura de la base de datos MongoDB, es esencial aprender a configurar un servidor de base de datos MongoDB tanto a nivel local como en la nube. La configuración local es conveniente para prototipos rápidos que no requieren conexión a internet. Sin embargo, se recomienda utilizar una base de datos en la nube mediante MongoDB Atlas para proyectos más serios y escalables. MongoDB Atlas ofrece numerosas ventajas sobre la instalación local. Primero, su configuración es sencilla y, como verás, puedes tenerla funcionando en cuestión de minutos con una base de datos gratuita lista para trabajar. MongoDB maneja todos los aspectos operacionales de la base de datos, como la provisión de recursos, la escalabilidad, las copias de seguridad y el monitoreo. Esto elimina gran parte de la configuración manual y garantiza alta disponibilidad. Además, la seguridad está garantizada por defecto con control de acceso, firewalls y acceso granular. Los respaldos automáticos (dependiendo del nivel del servicio) y la posibilidad de comenzar a ser productivo inmediatamente son otros de los beneficios destacados.

MongoDB no es solo un proveedor de bases de datos, sino una plataforma completa de desarrollo de datos, con un conjunto de tecnologías diseñadas alrededor de la base de datos central para satisfacer todas las necesidades de datos y mejorar la productividad de los desarrolladores. En este contexto, es importante destacar los siguientes componentes, que serán necesarios en las siguientes secciones:

  • MongoDB Community Edition: Esta es la versión gratuita de MongoDB que se ejecuta en todos los sistemas operativos principales. Es ideal para realizar pruebas y manipular datos de forma local.

  • MongoDB Compass: Una interfaz gráfica (GUI) que permite gestionar, consultar, agregar y analizar los datos de MongoDB en un entorno visual. Compass es una herramienta madura y útil que se utilizará durante las exploraciones iniciales de consultas y agregaciones.

  • MongoDB Atlas: La solución de base de datos como servicio de MongoDB. Esta es una de las razones principales por las que MongoDB se encuentra en el centro del stack FARM (Frontend, API, React y MongoDB). Atlas es relativamente fácil de configurar y alivia la carga de la administración manual de bases de datos.

  • MongoDB Shell (mongosh): Un shell de línea de comandos que permite realizar operaciones CRUD (crear, leer, actualizar y eliminar) sobre la base de datos, así como tareas administrativas como la creación y eliminación de bases de datos, la puesta en marcha y detención de servicios, entre otras.

En cuanto a la instalación de MongoDB, se deben seguir ciertas pautas dependiendo del sistema operativo en el que se esté trabajando. A continuación, se presenta el procedimiento de instalación de MongoDB Community Edition y Compass en sistemas Windows.

Para instalar MongoDB en Windows, es necesario contar con una versión de Windows de 64 bits en una arquitectura x86_64, como Windows 11, Windows Server 2019 o Windows Server 2022. Los pasos para la instalación son los siguientes:

  1. Dirígete al Centro de Descargas de MongoDB (https://www.mongodb.com/try/download/community), selecciona la versión de Windows y haz clic en Descargar.

  2. Una vez descargado el instalador, ejecútalo y sigue las instrucciones del asistente de instalación.

  3. Lee y acepta el acuerdo de licencia, luego selecciona Siguiente.

  4. En la pantalla de configuración, elige la opción Completa para una instalación con todos los componentes necesarios.

  5. Selecciona si deseas que MongoDB se ejecute como un servicio de red de Windows, lo cual es lo más recomendable, y procede con los valores predeterminados.

  6. El asistente te pedirá que instales MongoDB Compass. Marca la casilla correspondiente y continúa con la instalación.

  7. Tras completar la instalación, deberías poder verificar el funcionamiento del servicio MongoDB y Compass mediante las interfaces adecuadas.

Además de MongoDB Community Edition y Compass, también es necesario instalar mongosh, el shell de MongoDB. Este shell no solo permite realizar operaciones CRUD, sino también ejecutar tareas administrativas. Para instalar mongosh:

  1. Accede nuevamente al Centro de Descargas de MongoDB (https://www.mongodb.com/try/download/shell) y selecciona la versión para Windows.

  2. Descarga e instala el paquete MSI.

  3. Al finalizar, podrás verificar la instalación abriendo la terminal de Windows y ejecutando el comando mongosh. Deberías ver un prompt que te permitirá interactuar con las bases de datos.

Una vez instalado todo el software necesario, podrás comenzar a trabajar con MongoDB, explorando bases de datos locales y remotas. También es importante mencionar las herramientas complementarias de MongoDB que permiten exportar, importar y manipular datos de manera eficiente. Algunas de estas herramientas incluyen mongoimport para importar datos en formatos JSON, CSV o TSV, mongoexport para exportar datos, y mongodump para realizar exportaciones binarias de bases de datos.

La configuración y gestión de MongoDB son esenciales para el desarrollo de aplicaciones modernas que manejan grandes cantidades de datos. La ventaja de contar con una plataforma como MongoDB es que facilita la implementación de soluciones de bases de datos rápidas y escalables, eliminando muchas de las complejidades que tradicionalmente asociamos con la administración de bases de datos.

Es importante que el lector comprenda que la elección entre una base de datos local o en la nube depende de varios factores. Aunque la configuración local puede ser más económica y sencilla para proyectos pequeños o prototipos rápidos, los beneficios de MongoDB Atlas, como la seguridad, el escalado automático, y el mantenimiento gestionado, son cruciales cuando se desarrolla una aplicación a gran escala. Además, se debe tener en cuenta que la administración manual de bases de datos locales puede ser una tarea exigente que implica preocupaciones constantes sobre la disponibilidad, la seguridad y el rendimiento.