Maison >développement back-end >Tutoriel Python >Blog de réflexion : Mon parcours pour créer une API d'annonces immobilières
Lorsque j'ai commencé à créer l'API d'annonces immobilières, je ne savais pas vraiment dans quoi je m'embarquais. En tant que développeur de logiciels débutant, l’idée de développer une API à partir de zéro semblait intimidante. Mais j'avais hâte de me mettre au défi et de mettre à l'épreuve mes connaissances en Python et SQL. Maintenant, en repensant à ce voyage, je suis étonné de tout ce que j'ai appris, non seulement sur le codage, mais aussi sur l'importance de la persévérance, la joie de résoudre des problèmes et le plaisir de voir un projet prendre vie. .
Cet article de blog est une réflexion sur mon expérience dans la création de cette application API d'annonces immobilières pour débutants. Je partagerai les hauts et les bas, les moments d'apprentissage clés et quelques informations techniques utiles sur Python et SQL qui ont rendu ce projet à la fois stimulant et enrichissant.
Mon parcours a commencé avec les fondamentaux de Python. J'ai commencé par apprendre les bases : les types de données, le flux de contrôle, les fonctions et la programmation orientée objet. La simplicité et la lisibilité de Python m'ont permis de comprendre rapidement ces concepts. Cependant, le véritable défi est survenu lorsque j'ai dû appliquer ces principes fondamentaux pour résoudre des problèmes du monde réel.
Comprendre la programmation orientée objet (POO) a été une étape importante. J'ai réalisé qu'en utilisant des classes et des objets, je pouvais créer une manière structurée de gérer différentes entités, telles que les utilisateurs et les propriétés, dans mon API d'annonces immobilières. Cela a jeté les bases de mon projet, dans lequel je devais modéliser des entités du monde réel telles que des utilisateurs, des propriétés et des applications.
Par exemple, dans mon API, j'ai défini un modèle User à l'aide de classes Python, ce qui m'a aidé à comprendre la relation entre différentes entités et comment elles interagissent au sein d'un système. Voici une version simplifiée de mon modèle utilisateur :
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')
C'était ma première véritable exposition à la façon dont Python pouvait être utilisé pour représenter des objets du monde réel dans du code, et cela m'a ouvert un tout nouveau monde de possibilités.
Une fois que j'ai eu une compréhension de base de Python et de la programmation orientée objet, j'ai décidé de commencer à créer l'API d'annonces immobilières. L'objectif était simple : créer une API qui permet aux propriétaires de répertorier leurs propriétés et aux locataires/acheteurs potentiels de parcourir, postuler et gérer leurs propriétés préférées. Cependant, pour atteindre cet objectif, il fallait bien plus que de simples fondamentaux.
Utilisation de Flask pour le développement d'API RESTful
Flask, un framework Web léger pour Python, est devenu mon outil de prédilection pour créer l'API. J'ai adoré la simplicité et la flexibilité de Flask ; il m'a fourni juste assez de structure pour m'aider à démarrer sans me submerger de complexité inutile.
J'ai commencé par configurer des routes pour gérer différentes méthodes HTTP telles que GET, POST, PATCH et DELETE. Cela m'a permis d'implémenter les opérations de base CRUD (Créer, Lire, Mettre à jour, Supprimer) pour les propriétés, les utilisateurs, les applications et les listes de souhaits. L'une des choses que j'ai rapidement apprises a été l'importance de renvoyer les codes d'état HTTP appropriés avec les réponses. Par exemple, une requête POST réussie devrait renvoyer un statut 201 Créé, tandis qu'une requête pour une ressource inexistante devrait renvoyer 404 Not Found.
Voici un exemple d'itinéraire que j'ai créé pour récupérer une propriété par son ID :
@app.route('/properties/<int:id>', 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
Cet extrait m'a aidé à comprendre comment gérer différents scénarios et à m'assurer que l'API fournissait des commentaires significatifs au client.
Implémentation de SQLAlchemy pour les interactions avec les bases de données
Une autre partie cruciale de la création de cette API consistait à apprendre à interagir avec la base de données à l'aide de SQLAlchemy, un outil ORM (Object-Relational Mapping) qui relie les classes Python et les bases de données SQL. J'ai choisi SQLAlchemy car il s'intègre bien à Flask et simplifie de nombreux aspects complexes de SQL, comme la création et la gestion des relations entre les tables.
L'un des aspects techniques les plus utiles de SQLAlchemy que j'ai utilisé était la création de relations plusieurs-à-plusieurs. Par exemple, dans mon API immobilière, les utilisateurs peuvent mettre plusieurs propriétés en favoris, et chaque propriété peut être favorite par de nombreux utilisateurs. Pour modéliser cela, j'ai utilisé une table de liens appelée Wishlist pour gérer cette relation plusieurs-à-plusieurs :
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) )
Cet extrait m'a permis de gérer efficacement les relations utilisateur-propriété sans créer de données redondantes. En utilisant les fonctions de relation de SQLAlchemy, je pourrais facilement interroger et gérer ces connexions.
Sérialisation avec Flask-Marshmallow
Another important learning experience was using Flask-Marshmallow to serialize my SQLAlchemy models into JSON format. Serialization converts complex data types into a format that can be easily transferred over the network, which is essential for building APIs. I used Marshmallow schemas to define how my models should be converted to JSON. Here's an example schema for my Property model:
class PropertySchema(ma.SQLAlchemyAutoSchema): class Meta: model = Property load_instance = True property_schema = PropertySchema() properties_schema = PropertySchema(many=True)
Using Marshmallow simplified the process of converting my models to JSON, allowing me to focus on building out the core functionality of the API.
Looking back, I realize how far I've come in just a short time. When I started, I barely knew the basics of Python. Now, I've built a full-fledged API that uses Flask, SQLAlchemy, and Marshmallow, and I have a much deeper understanding of web development.
One of the most rewarding aspects of this journey was the feeling of solving problems. Every error message, every bug, and every unexpected behavior taught me something new. Whether it was figuring out why a route wasn't working, debugging a database connection issue, or learning how to properly handle CORS, each challenge helped me grow as a developer.
But perhaps the most important lesson I've learned is the value of persistence. There were times when I felt stuck or frustrated, but I kept pushing forward. I learned to break problems down into smaller, more manageable pieces and tackle them one by one.
One technical aspect I found particularly useful was configuring Cross-Origin Resource Sharing (CORS) in my Flask application. CORS is crucial for allowing web applications hosted on different domains to communicate with each other. In my case, it allowed the frontend (built with React) to make requests to the backend API without getting blocked by the browser's same-origin policy.
Here's how I set up CORS in my Flask app:
from flask_cors import CORS app = Flask(__name__) CORS(app)
By simply adding CORS(app), I enabled cross-origin requests for all routes in my app, which made the integration between my frontend and backend much smoother. This is a small but powerful feature that every web developer should know.
Building the Real Estate Listing API was a challenging but immensely rewarding experience. I learned so much about Python, SQL, and web development, and I feel much more confident in my abilities as a developer. I'm excited to continue building, learning, and growing in this field, and I can't wait to see what the future holds.
For anyone just starting out, my advice is simple: keep learning, keep experimenting, and don't be afraid to make mistakes. Every challenge is an opportunity to grow, and every project is a step forward on your journey as a developer.
https://github.com/migsldev/real-estate-api
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!