HOUSE FINDER
En el departamento del Atlántico – Colombia, hay muchos proyectos de vivienda, de muchos tipos (VIS, VIP, NO VIS) donde personas de todas las clases pueden conseguir su propia casa, pero hay muchas opciones y pensé lo siguiente, ¿por qué no crear un ¿Sitio web donde las personas pueden buscar todas las opciones en un sitio en lugar de hacerlo sitio por sitio web? Decidí comenzar a crear mi primer gran proyecto, usando mis conocimientos de HTML, CSS, Bootstrap, Python y dos de sus frameworks, FastApi y Flask y, por último, conectar todo esto usando contenedores de Docker.
WEBSITE HOUSE FINDER
Este sitio web tiene varias funcionalidades, incluye una sesión de usuario donde puede personalizar el perfil, tiene un buscador para encontrar proyectos por empresa, nombre, ciudad y ubicación, muestra un resumen de los proyectos donde se puede ver la información principal de cada proyecto de vivienda como precio, nombre, tipo y ubicación y el usuario puede decidir si desea ingresar al proyecto y ver todos los detalles, y también tiene una sección de comentarios donde el usuario que está registrado puede comentar y ver las opiniones de otros usuarios sobre un proyecto específico, cada proyecto tiene un botón para guardar en la sesión de proyectos favoritos donde cada usuario puede verlos más tarde y por último, esta sección es para desarrolladores, puede acceder a las credenciales de la API y ver documentación sobre cómo usar la API Rest de House Finder y puede acceder a la documentación de swagger haciendo clic en el enlace que redirige a swagger. documentación.
El usuario puede registrar datos de entrada como nombre, apellido, ciudad, correo electrónico, contraseña y nombre de usuario que deben ser únicos, en caso de que ese nombre de usuario esté registrado; El sistema recomienda que ingrese otro nombre de usuario, lo mismo que el correo electrónico. Además, en caso de registrarse con un nombre de usuario o correo electrónico existente, el sistema le informará que está registrado y lo redirigirá a la sección de inicio de sesión. Por otro lado, en la sesión de inicio de sesión necesita ingresar un nombre de usuario o correo electrónico y contraseña, en caso de que haya olvidado su contraseña, puede ir a la sesión de Olvidé mi contraseña y escribir su correo electrónico y el sistema le enviará una nueva contraseña de 8 caracteres y con esta contraseña podrá inicie sesión, vaya a su perfil y cambie esa contraseña por una que pueda recordar fácilmente. En ese perfil, puedes actualizar una nueva foto de perfil si lo deseas y hay una sección donde puedes guardar los proyectos que te gustaron y verlos con más detalles.
En la sección de proyectos, puede ver todos los proyectos o los proyectos filtrados que se colocan en el motor de búsqueda, los proyectos están en una tarjeta en columnas de 3, cada usuario de la tarjeta puede ver una foto de fondo, nombre, ciudad, ubicación, precio y tipo de eso. proyecto, con esta información el usuario puede decidir si está interesado en ver más detalles o no, y además, hay un botón donde el usuario puede decidir guardar el proyecto en su perfil, este botón solo se habilita si el usuario está iniciado sesión. En el proyecto, el usuario puede ver más detalles sobre los proyectos, como descripciones, logotipo del proyecto, empresa, número de contacto y hay dos botones, uno que redirige a la ubicación del mapa de Google y otro que redirige a la página oficial del proyecto y, finalmente, hay un espacio para comentarios donde Los usuarios pueden dejar sus opiniones sobre el proyecto y otros pueden verlas.
Finalmente, en la sección API, puedes leer la documentación sobre los diferentes métodos y rutas disponibles, donde puedes obtener proyectos individuales o filtrados por empresa, ciudad y ubicación, hay una ruta para publicar un proyecto completo, otra para actualizar el precio, conociendo precios. cambios en el tiempo y finalmente, una ruta para eliminar un proyecto en caso de que no haya un proyecto con casas o departamentos disponibles. Sin embargo, para acceder a esas rutas, necesita unas credenciales, y para obtener credenciales, primero debe estar registrado e iniciado sesión e ir a la sección de generación de claves de API y con esta clave de API, puede acceder a las rutas excepto para eliminar proyectos y actualizar precios, ellos Solo están disponibles para usuarios administradores que necesitan un token secreto. Además, en la documentación, hay un enlace donde se puede ir a la documentación de swagger. Es una forma interactiva de probar la API.
API REST HOUSE FINDER
Una API REST (Interfaz de programación de aplicaciones de transferencia de estado representacional) es un conjunto de reglas y convenciones para crear servicios web e interactuar con ellos. Utiliza métodos HTTP estándar como GET, POST, PUT, DELETE para realizar operaciones en recursos, que se identifican mediante URL (localizadores uniformes de recursos). En resumen, las API REST permiten que diferentes sistemas se comuniquen a través de la web de forma estandarizada, lo que facilita la integración e interacción con diversos servicios y aplicaciones web.
Los principales métodos establecidos son los siguientes:
En esta API REST, desarrollé 7 rutas, 4 métodos GET, un método POST, PATH y DELETE, a continuación se los mostraré:
METHOD | ROUTE | PARAMETERS | DESCRIPTION |
GET | /api/v1/location | x-api-public-key(header) – x-api-secret-key(header) – loc(Str) | Retrieve projects filtered by location |
GET | /api/v1/city | x-api-public-key(header) – x-api-secret-key(header) – city(Str) | Retrieve projects filtered by city |
GET | /api/v1/company | x-api-public-key(header) – x-api-secret-key(header) – company(Str) | Retrieve projects filtered by company |
GET | /api/v1/project-details | x-api-public-key(header) – x-api-secret-key(header) – project_id(Int) | Retrieve a individual project |
POST | /api/v1/add-project | x-api-public-key(header) – x-api-secret-key(header) – name(Str) – logo(Str) – location(Str) – city(Str) – company(Str) – address(Str) – url_map(Str) – contact(Str) – area(Float) – price(Int) – type(Str) – description(Str) – url_website(Str) | Create a new project in server |
PATH | /api/v1/update-price | x-api-public-key(header) – x-api-secret-key(header) – admin_api_key (str) – project_id(Int) – new_price(Int) | Update price of individual project |
DELETE | /api/v1/project-closed | x-api-public-key(header) – x-api-secret-key(header) – admin_api_key (str) – project_id(Int) | Delete a particular project |
Decidí crear este servicio porque crear o consumir API permite separar el desarrollo frontend y backend, permitiendo a los equipos trabajar de forma independiente en diferentes partes de la aplicación, facilitar la integración con servicios externos, promover mejores prácticas y métodos consistentes para realizar operaciones, lo que simplifica desarrollo e integración y mi idea es escalar esta API para proyectos de vivienda para toda Colombia para que los desarrolladores puedan acceder a esta información y creen aplicaciones de futuros donde las personas puedan encontrar su futuro hogar fácilmente.
ARQUITECTURA DE LA APLICACIÓN
En esta configuración, tenemos una aplicación Flask que sirve un sitio web para un buscador de casas y una aplicación FastAPI que proporciona una API REST para acceder a los mismos datos de vivienda. Ambas aplicaciones están conectadas a una única base de datos PostgreSQL para garantizar la coherencia y centralización de los datos. Nginx actúa como un proxy inverso, dirigiendo las solicitudes HTTP entrantes a la aplicación adecuada. Cuando una solicitud se dirige al sitio web, Nginx la enruta a la aplicación Flask, mientras que las solicitudes dirigidas a las rutas API se redirigen a la aplicación FastAPI.
Cada componente se ejecuta en su propio contenedor Docker, administrado por Docker Compose, que maneja la orquestación y la creación de redes de contenedores. El contenedor PostgreSQL almacena todos los datos de forma persistente, mientras que el contenedor Nginx gestiona el tráfico y el equilibrio de carga. Flask maneja la interfaz frontal, lo que permite a los usuarios buscar, ver e interactuar con proyectos de vivienda. FastAPI maneja de manera eficiente las solicitudes de API y ofrece una rápida recuperación y procesamiento de datos. Docker garantiza que cada servicio esté aislado, sea escalable y fácilmente implementable. Esta arquitectura combina las fortalezas de cada tecnología para ofrecer un servicio web sólido y responsivo.
Diagrama de la arquitectura del proyecto