Cuando me propuse crear la API de listado de bienes raíces por primera vez, no sabía muy bien en qué me estaba metiendo. Como desarrollador de software principiante, la idea de desarrollar una API desde cero parecía intimidante. Pero estaba ansioso por desafiarme a mí mismo y poner a prueba mis conocimientos de Python y SQL. Ahora, mirando hacia atrás en este viaje, me sorprende lo mucho que he aprendido, no solo sobre programación, sino también sobre la importancia de la perseverancia, la alegría de resolver problemas y la emoción de ver cómo un proyecto cobra vida. .
Esta publicación de blog es un reflejo de mi experiencia en la creación de esta aplicación API de listado de bienes raíces para principiantes. Compartiré los altibajos, los momentos clave de aprendizaje y algunos conocimientos técnicos útiles sobre Python y SQL que hicieron que este proyecto fuera desafiante y gratificante.
Mi viaje comenzó con los fundamentos de Python. Comencé aprendiendo los conceptos básicos: tipos de datos, flujo de control, funciones y programación orientada a objetos. La simplicidad y legibilidad de Python me facilitaron la comprensión rápida de estos conceptos. Sin embargo, el verdadero desafío llegó cuando tuve que aplicar estos fundamentos para resolver problemas del mundo real.
Comprender la programación orientada a objetos (OOP) fue un hito importante. Me di cuenta de que al usar clases y objetos, podía crear una forma estructurada de manejar diferentes entidades, como Usuarios y Propiedades, en mi API de listado de bienes raíces. Esto sentó las bases de mi proyecto, donde necesitaba modelar entidades del mundo real como usuarios, propiedades y aplicaciones.
Por ejemplo, en mi API, definí un modelo de usuario usando clases de Python, lo que me ayudó a comprender la relación entre diferentes entidades y cómo interactúan dentro de un sistema. Aquí hay una versión simplificada de mi modelo de usuario:
class User(db.Model): id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String, nullable=False) email = db.Column(db.String, nullable=False, unique=True) password = db.Column(db.String, nullable=False) role = db.Column(db.Enum('agent', 'property_owner', 'buyer', name='user_roles'), nullable=False) properties = db.relationship('Property', backref='owner', lazy=True) applications = db.relationship('Application', backref='applicant', lazy=True) favorites = db.relationship('Property', secondary='wishlist', backref='favorited_by', lazy='dynamic')
Esta fue mi primera exposición real a cómo se podría usar Python para representar objetos del mundo real en código, y me abrió un mundo completamente nuevo de posibilidades.
Una vez que tuve un conocimiento básico de Python y la programación orientada a objetos, decidí comenzar a construir la API de listado de bienes raíces. El objetivo era simple: crear una API que permitiera a los propietarios enumerar propiedades y a los posibles inquilinos/compradores explorar, solicitar y administrar sus propiedades favoritas. Sin embargo, lograr este objetivo requirió mucho más que solo los fundamentos.
Uso de Flask para el desarrollo de API RESTful
Flask, un marco web liviano para Python, se convirtió en mi herramienta preferida para crear la API. Me encantó la simplicidad y flexibilidad de Flask; proporcionó la estructura suficiente para ayudarme a comenzar sin abrumarme con complejidades innecesarias.
Comencé configurando rutas para manejar diferentes métodos HTTP como GET, POST, PATCH y DELETE. Esto me permitió implementar las operaciones CRUD (Crear, Leer, Actualizar, Eliminar) principales para propiedades, usuarios, aplicaciones y listas de deseos. Una de las cosas que aprendí rápidamente fue la importancia de devolver códigos de estado HTTP apropiados con las respuestas. Por ejemplo, una solicitud POST exitosa debería devolver un estado 201 Creado, mientras que una solicitud de un recurso no existente debería devolver 404 No encontrado.
Aquí hay un ejemplo de una ruta que creé para buscar una propiedad por su ID:
@app.route('/properties/', methods=['GET']) def get_property(id): property = Property.query.get(id) if property: return jsonify(property_schema.dump(property)), 200 else: return jsonify({'error': 'Property not found'}), 404
Este fragmento me ayudó a comprender cómo manejar diferentes escenarios y garantizar que la API proporcionara comentarios significativos al cliente.
Implementación de SQLAlchemy para interacciones con bases de datos
Otra parte crucial de la creación de esta API fue aprender a interactuar con la base de datos usando SQLAlchemy, una herramienta ORM (Mapeo relacional de objetos) que une las clases de Python y las bases de datos SQL. Elegí SQLAlchemy porque se integra bien con Flask y simplifica muchos de los aspectos complejos de SQL, como crear y administrar relaciones entre tablas.
Uno de los aspectos técnicos más útiles de SQLAlchemy que utilicé fue la creación de relaciones de muchos a muchos. Por ejemplo, en mi API de bienes raíces, los usuarios pueden marcar como favoritas varias propiedades, y muchos usuarios pueden marcar cada propiedad como favorita. Para modelar esto, utilicé una tabla de enlaces llamada Lista de deseos para gestionar esta relación de muchos a muchos:
wishlist_table = db.Table('wishlist', db.Column('user_id', db.Integer, db.ForeignKey('user.id'), primary_key=True), db.Column('property_id', db.Integer, db.ForeignKey('property.id'), primary_key=True) )
Este fragmento me permitió administrar de manera eficiente las relaciones usuario-propiedad sin crear datos redundantes. Al utilizar las funciones de relación de SQLAlchemy, pude consultar y administrar fácilmente estas conexiones.
Serialización con Flask-Marshmallow
Otra experiencia de aprendizaje importante fue usar Flask-Marshmallow para serializar mis modelos SQLAlchemy en formato JSON. La serialización convierte tipos de datos complejos en un formato que se puede transferir fácilmente a través de la red, lo cual es esencial para crear API. Utilicé esquemas de Marshmallow para definir cómo deberían convertirse mis modelos a JSON. Aquí hay un esquema de ejemplo para mi modelo de propiedad:
class PropertySchema(ma.SQLAlchemyAutoSchema): class Meta: model = Property load_instance = True property_schema = PropertySchema() properties_schema = PropertySchema(many=True)
Usar Marshmallow simplificó el proceso de conversión de mis modelos a JSON, lo que me permitió concentrarme en desarrollar la funcionalidad principal de la API.
Mirando hacia atrás, me doy cuenta de lo lejos que he llegado en tan poco tiempo. Cuando comencé, apenas conocía los conceptos básicos de Python. Ahora, he creado una API completa que utiliza Flask, SQLAlchemy y Marshmallow, y tengo un conocimiento mucho más profundo del desarrollo web.
Uno de los aspectos más gratificantes de este viaje fue la sensación de resolver problemas. Cada mensaje de error, cada error y cada comportamiento inesperado me enseñó algo nuevo. Ya sea descubrir por qué una ruta no funcionaba, depurar un problema de conexión a la base de datos o aprender a manejar CORS correctamente, cada desafío me ayudó a crecer como desarrollador.
Pero quizás la lección más importante que he aprendido es el valor de la perseverancia. Hubo momentos en los que me sentí estancado o frustrado, pero seguí adelante. Aprendí a dividir los problemas en partes más pequeñas y manejables y a abordarlas una por una.
Un aspecto técnico que encontré particularmente útil fue configurar el uso compartido de recursos entre orígenes (CORS) en mi aplicación Flask. CORS es crucial para permitir que las aplicaciones web alojadas en diferentes dominios se comuniquen entre sí. En mi caso, permitió que el frontend (creado con React) realizara solicitudes a la API del backend sin ser bloqueado por la política del mismo origen del navegador.
Así es como configuro CORS en mi aplicación Flask:
from flask_cors import CORS app = Flask(__name__) CORS(app)
Simplemente agregando CORS (aplicación), habilité solicitudes de origen cruzado para todas las rutas en mi aplicación, lo que hizo que la integración entre mi frontend y backend fuera mucho más fluida. Esta es una característica pequeña pero poderosa que todo desarrollador web debería conocer.
Crear la API de listado de bienes raíces fue una experiencia desafiante pero inmensamente gratificante. Aprendí mucho sobre Python, SQL y desarrollo web, y me siento mucho más seguro de mis habilidades como desarrollador. Estoy emocionado de seguir construyendo, aprendiendo y creciendo en este campo, y no puedo esperar a ver lo que depara el futuro.
Para cualquiera que esté empezando, mi consejo es simple: siga aprendiendo, siga experimentando y no tenga miedo de cometer errores. Cada desafío es una oportunidad para crecer y cada proyecto es un paso adelante en tu viaje como desarrollador.
https://github.com/migsldev/real-estate-api
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3