Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Blog Reflektif: Perjalanan Saya Membina API Penyenaraian Hartanah

Blog Reflektif: Perjalanan Saya Membina API Penyenaraian Hartanah

WBOY
WBOYasal
2024-09-03 10:53:061023semak imbas

Reflective Blog: My Journey Building a Real Estate Listing API

Blog Reflektif: Perjalanan Saya Membina API Penyenaraian Hartanah


pengenalan

Apabila saya mula-mula merancang untuk membina API Penyenaraian Hartanah, saya tidak begitu mengetahui perkara yang saya hadapi. Sebagai pembangun perisian peringkat permulaan, idea untuk membangunkan API dari awal kelihatan menakutkan. Tetapi saya tidak sabar-sabar untuk mencabar diri sendiri dan menguji pengetahuan Python dan SQL saya. Sekarang, melihat kembali perjalanan ini, saya kagum dengan betapa banyak yang saya pelajari—bukan hanya tentang pengekodan, tetapi juga tentang kepentingan ketabahan, kegembiraan menyelesaikan masalah, dan keseronokan melihat projek menjadi nyata .

Catatan blog ini adalah refleksi tentang pengalaman saya membina apl API Penyenaraian Hartanah pemula ini. Saya akan berkongsi masa yang tinggi dan rendah, detik pembelajaran penting dan beberapa cerapan teknikal yang berguna tentang Python dan SQL yang menjadikan projek ini mencabar dan memberi ganjaran.


Permulaan: Mempelajari Asas Python

Perjalanan saya bermula dengan asas Python. Saya bermula dengan mempelajari asas: jenis data, aliran kawalan, fungsi dan pengaturcaraan berorientasikan objek. Kesederhanaan dan kebolehbacaan Python memudahkan saya memahami konsep ini dengan cepat. Walau bagaimanapun, cabaran sebenar datang apabila saya terpaksa menggunakan asas ini untuk menyelesaikan masalah dunia sebenar.

Memahami pengaturcaraan berorientasikan objek (OOP) merupakan peristiwa penting. Saya menyedari bahawa dengan menggunakan kelas dan objek, saya boleh mencipta cara berstruktur untuk mengendalikan entiti yang berbeza, seperti Pengguna dan Hartanah, dalam API Penyenaraian Hartanah saya. Ini meletakkan asas untuk projek saya, di mana saya perlu memodelkan entiti dunia sebenar seperti pengguna, sifat dan aplikasi.

Sebagai contoh, dalam API saya, saya mentakrifkan model Pengguna menggunakan kelas Python, yang membantu saya memahami hubungan antara entiti yang berbeza dan cara mereka berinteraksi dalam sistem. Berikut ialah versi ringkas model Pengguna saya:

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')

Ini adalah pendedahan sebenar pertama saya tentang cara Python boleh digunakan untuk mewakili objek dunia sebenar dalam kod, dan ia membuka dunia kemungkinan baharu untuk saya.


Menyelam Lebih Dalam: Membina API Hartanah

Setelah saya mempunyai pemahaman asas tentang Python dan pengaturcaraan berorientasikan objek, saya memutuskan untuk mula membina API Penyenaraian Hartanah. Matlamatnya mudah: buat API yang membolehkan pemilik hartanah menyenaraikan hartanah dan bakal penyewa/pembeli menyemak imbas, memohon dan mengurus hartanah kegemaran mereka. Walau bagaimanapun, untuk mencapai matlamat ini memerlukan lebih daripada sekadar asas.

Menggunakan Flask untuk Pembangunan API RESTful

Flask, rangka kerja web ringan untuk Python, menjadi alat pilihan saya untuk membina API. Saya menyukai kesederhanaan dan fleksibiliti Flask; ia menyediakan struktur yang cukup untuk membantu saya bermula tanpa membebankan saya dengan kerumitan yang tidak perlu.

Saya mula dengan menyediakan laluan untuk mengendalikan kaedah HTTP yang berbeza seperti GET, POST, PATCH dan DELETE. Ini membolehkan saya melaksanakan operasi teras CRUD (Buat, Baca, Kemas Kini, Padam) untuk sifat, pengguna, aplikasi dan senarai hajat. Salah satu perkara yang cepat saya pelajari ialah kepentingan mengembalikan kod status HTTP yang sesuai dengan respons. Sebagai contoh, permintaan POST yang berjaya harus mengembalikan status 201 Created, manakala permintaan untuk sumber yang tidak sedia ada harus mengembalikan 404 Not Found.

Berikut ialah contoh laluan yang saya buat untuk mengambil harta dengan IDnya:

@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

Coretan ini membantu saya memahami cara mengendalikan senario yang berbeza dan memastikan API memberikan maklum balas yang bermakna kepada pelanggan.

Melaksanakan SQLAlchemy untuk Interaksi Pangkalan Data

Satu lagi bahagian penting dalam membina API ini ialah mempelajari cara berinteraksi dengan pangkalan data menggunakan SQLAlchemy, alat ORM (Pemetaan Perhubungan Objek) yang menghubungkan kelas Python dan pangkalan data SQL. Saya memilih SQLAlchemy kerana ia berintegrasi dengan baik dengan Flask dan memudahkan banyak aspek kompleks SQL, seperti mencipta dan mengurus perhubungan antara jadual.

Salah satu aspek teknikal SQLAlchemy yang paling berguna yang saya gunakan ialah mencipta perhubungan banyak-ke-banyak. Contohnya, dalam API Hartanah saya, pengguna boleh menggemari berbilang hartanah dan setiap harta boleh digemari oleh ramai pengguna. Untuk memodelkan ini, saya menggunakan jadual pautan yang dipanggil Wishlist untuk mengurus perhubungan banyak-ke-banyak ini:

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)
)

Coretan ini membenarkan saya mengurus perhubungan harta pengguna dengan cekap tanpa membuat data berlebihan. Dengan menggunakan fungsi perhubungan SQLAlchemy, saya boleh membuat pertanyaan dan mengurus sambungan ini dengan mudah.

Pensiran dengan 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: Reflecting on the Journey

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.


A Useful Technical Insight: Flask CORS Configuration

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.


Conclusion

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

Atas ialah kandungan terperinci Blog Reflektif: Perjalanan Saya Membina API Penyenaraian Hartanah. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn