Als ich mich zum ersten Mal daran machte, die Immobilien-Listing-API zu entwickeln, wusste ich nicht genau, worauf ich mich einließ. Als Einsteiger in die Softwarebranche kam mir die Idee, eine API von Grund auf neu zu entwickeln, einschüchternd vor. Aber ich wollte mich unbedingt selbst herausfordern und meine Python- und SQL-Kenntnisse auf die Probe stellen. Wenn ich jetzt auf diese Reise zurückblicke, bin ich erstaunt, wie viel ich gelernt habe – nicht nur über das Programmieren, sondern auch über die Bedeutung von Ausdauer, die Freude an der Problemlösung und den Nervenkitzel, ein Projekt zum Leben erweckt zu sehen .
Dieser Blog-Beitrag spiegelt meine Erfahrungen beim Aufbau dieser Einsteiger-API-App für Immobilieneinträge wider. Ich werde die Höhen und Tiefen, die wichtigsten Lernmomente und einige nützliche technische Erkenntnisse über Python und SQL teilen, die dieses Projekt sowohl herausfordernd als auch lohnend gemacht haben.
Meine Reise begann mit den Grundlagen von Python. Ich begann damit, die Grundlagen zu erlernen: Datentypen, Kontrollfluss, Funktionen und objektorientierte Programmierung. Die Einfachheit und Lesbarkeit von Python erleichterten es mir, diese Konzepte schnell zu verstehen. Die eigentliche Herausforderung bestand jedoch darin, dass ich diese Grundlagen anwenden musste, um reale Probleme zu lösen.
Das Verständnis der objektorientierten Programmierung (OOP) war ein bedeutender Meilenstein. Mir wurde klar, dass ich durch die Verwendung von Klassen und Objekten eine strukturierte Möglichkeit schaffen konnte, verschiedene Entitäten wie Benutzer und Eigenschaften in meiner Immobilienlisting-API zu verwalten. Dies legte den Grundstein für mein Projekt, bei dem ich reale Entitäten wie Benutzer, Eigenschaften und Anwendungen modellieren musste.
Zum Beispiel habe ich in meiner API ein Benutzermodell mithilfe von Python-Klassen definiert, was mir geholfen hat, die Beziehung zwischen verschiedenen Entitäten und deren Interaktion innerhalb eines Systems zu verstehen. Hier ist eine vereinfachte Version meines Benutzermodells:
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')
Dies war mein erster wirklicher Kontakt damit, wie Python zur Darstellung realer Objekte im Code verwendet werden kann, und es eröffnete mir eine völlig neue Welt voller Möglichkeiten.
Sobald ich ein grundlegendes Verständnis von Python und objektorientierter Programmierung hatte, beschloss ich, mit dem Aufbau der Real Estate Listing API zu beginnen. Das Ziel war einfach: Erstellen Sie eine API, die es Immobilieneigentümern ermöglicht, Immobilien aufzulisten, und potenziellen Mietern/Käufern, ihre bevorzugten Immobilien zu durchsuchen, sich zu bewerben und zu verwalten. Um dieses Ziel zu erreichen, waren jedoch weit mehr als nur die Grundlagen erforderlich.
Flask für die RESTful-API-Entwicklung verwenden
Flask, ein leichtes Web-Framework für Python, wurde zu meinem bevorzugten Tool zum Erstellen der API. Ich mochte die Einfachheit und Flexibilität von Flask; Es bot gerade genug Struktur, um mir den Einstieg zu erleichtern, ohne mich mit unnötiger Komplexität zu überfordern.
Ich begann damit, Routen einzurichten, um verschiedene HTTP-Methoden wie GET, POST, PATCH und DELETE zu verarbeiten. Dadurch konnte ich die zentralen CRUD-Vorgänge (Erstellen, Lesen, Aktualisieren, Löschen) für Eigenschaften, Benutzer, Anwendungen und Wunschlisten implementieren. Eines der Dinge, die ich schnell gelernt habe, war, wie wichtig es ist, mit Antworten die richtigen HTTP-Statuscodes zurückzugeben. Beispielsweise sollte eine erfolgreiche POST-Anfrage den Status „201 Erstellt“ zurückgeben, während eine Anfrage für eine nicht vorhandene Ressource den Status „404 Nicht gefunden“ zurückgeben sollte.
Hier ist ein Beispiel einer Route, die ich zum Abrufen einer Eigenschaft anhand ihrer ID erstellt habe:
@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
Dieses Snippet hat mir geholfen zu verstehen, wie man mit verschiedenen Szenarien umgeht und sicherstellt, dass die API dem Kunden aussagekräftiges Feedback liefert.
Implementieren von SQLAlchemy für Datenbankinteraktionen
Ein weiterer wichtiger Teil beim Aufbau dieser API war das Erlernen der Interaktion mit der Datenbank mithilfe von SQLAlchemy, einem ORM-Tool (Object-Relational Mapping), das Python-Klassen und SQL-Datenbanken verbindet. Ich habe mich für SQLAlchemy entschieden, weil es sich gut in Flask integrieren lässt und viele der komplexen Aspekte von SQL vereinfacht, wie das Erstellen und Verwalten von Beziehungen zwischen Tabellen.
Einer der nützlichsten technischen Aspekte von SQLAlchemy, die ich verwendet habe, war das Erstellen von Viele-zu-Viele-Beziehungen. In meiner Immobilien-API können Benutzer beispielsweise mehrere Immobilien zu ihren Favoriten hinzufügen, und jede Immobilie kann von vielen Benutzern als Favorit markiert werden. Um dies zu modellieren, habe ich eine Linktabelle namens „Wunschliste“ verwendet, um diese Viele-zu-Viele-Beziehung zu verwalten:
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) )
Mit diesem Snippet konnte ich Benutzer-Eigenschaftsbeziehungen effizient verwalten, ohne redundante Daten zu erstellen. Durch die Verwendung der Beziehungsfunktionen von SQLAlchemy konnte ich diese Verbindungen einfach abfragen und verwalten.
Serialisierung mit Flask-Marshmallow
Eine weitere wichtige Lernerfahrung war die Verwendung von Flask-Marshmallow zur Serialisierung meiner SQLAlchemy-Modelle in das JSON-Format. Durch die Serialisierung werden komplexe Datentypen in ein Format umgewandelt, das problemlos über das Netzwerk übertragen werden kann, was für die Erstellung von APIs unerlässlich ist. Ich habe Marshmallow-Schemas verwendet, um zu definieren, wie meine Modelle in JSON konvertiert werden sollen. Hier ist ein Beispielschema für mein Property-Modell:
class PropertySchema(ma.SQLAlchemyAutoSchema): class Meta: model = Property load_instance = True property_schema = PropertySchema() properties_schema = PropertySchema(many=True)
Die Verwendung von Marshmallow vereinfachte den Prozess der Konvertierung meiner Modelle in JSON, sodass ich mich auf den Aufbau der Kernfunktionalität der API konzentrieren konnte.
Rückblickend wird mir klar, wie weit ich in nur kurzer Zeit gekommen bin. Als ich anfing, kannte ich kaum die Grundlagen von Python. Jetzt habe ich eine vollwertige API erstellt, die Flask, SQLAlchemy und Marshmallow verwendet, und ich habe ein viel tieferes Verständnis der Webentwicklung.
Einer der lohnendsten Aspekte dieser Reise war das Gefühl, Probleme zu lösen. Jede Fehlermeldung, jeder Fehler und jedes unerwartete Verhalten hat mich etwas Neues gelehrt. Ob es darum ging, herauszufinden, warum eine Route nicht funktionierte, ein Datenbankverbindungsproblem zu debuggen oder zu lernen, wie man richtig mit CORS umgeht, jede Herausforderung hat mir geholfen, mich als Entwickler weiterzuentwickeln.
Aber die vielleicht wichtigste Lektion, die ich gelernt habe, ist der Wert der Beharrlichkeit. Es gab Zeiten, in denen ich feststeckte oder frustriert war, aber ich machte weiter. Ich habe gelernt, Probleme in kleinere, besser beherrschbare Teile zu zerlegen und sie einzeln anzugehen.
Ein technischer Aspekt, den ich besonders nützlich fand, war die Konfiguration von Cross-Origin Resource Sharing (CORS) in meiner Flask-Anwendung. CORS ist von entscheidender Bedeutung, damit Webanwendungen, die auf verschiedenen Domänen gehostet werden, miteinander kommunizieren können. In meinem Fall ermöglichte es dem Frontend (erstellt mit React), Anfragen an die Backend-API zu stellen, ohne durch die Same-Origin-Richtlinie des Browsers blockiert zu werden.
So richte ich CORS in meiner Flask-App ein:
from flask_cors import CORS app = Flask(__name__) CORS(app)
Durch einfaches Hinzufügen von CORS(app) habe ich ursprungsübergreifende Anfragen für alle Routen in meiner App aktiviert, was die Integration zwischen meinem Frontend und Backend viel reibungsloser machte. Dies ist eine kleine, aber leistungsstarke Funktion, die jeder Webentwickler kennen sollte.
Der Aufbau der Real Estate Listing API war eine herausfordernde, aber äußerst lohnende Erfahrung. Ich habe so viel über Python, SQL und Webentwicklung gelernt und fühle mich viel sicherer in meinen Fähigkeiten als Entwickler. Ich freue mich darauf, in diesem Bereich weiter aufzubauen, zu lernen und zu wachsen, und ich kann es kaum erwarten, zu sehen, was die Zukunft bringt.
Für alle, die gerade erst anfangen, ist mein Rat einfach: Lernen Sie weiter, experimentieren Sie weiter und haben Sie keine Angst, Fehler zu machen. Jede Herausforderung ist eine Chance zu wachsen und jedes Projekt ist ein Schritt vorwärts auf Ihrer Reise als Entwickler.
https://github.com/migsldev/real-estate-api
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3