ホームページ >バックエンド開発 >Python チュートリアル >Reflective ブログ: 不動産リスティング API を構築する私の旅
私が初めて Real Estate Listing API の構築に着手したとき、何をやるべきなのかよくわかりませんでした。初心者レベルのソフトウェア開発者にとって、API をゼロから開発するという考えは恐ろしいものに思えました。しかし、私は自分自身に挑戦し、Python と SQL の知識を試してみたいと熱望していました。今、この旅を振り返ると、コーディングだけでなく、忍耐力の重要性、問題解決の喜び、プロジェクトが実現するのを見るスリルについても学んだことに驚いています。 .
このブログ投稿は、この初心者向け不動産リスティング API アプリを構築した私の経験を反映したものです。このプロジェクトを挑戦的かつやりがいのあるものにした、Python と SQL に関する良い点と悪い点、重要な学習の瞬間、およびいくつかの有用な技術的洞察を共有します。
私の旅は Python の基礎から始まりました。私はデータ型、制御フロー、関数、オブジェクト指向プログラミングなどの基本を学ぶことから始めました。 Python のシンプルさと読みやすさのおかげで、これらの概念をすぐに理解することが容易になりました。しかし、本当の課題は、現実世界の問題を解決するためにこれらの基本を適用しなければならないときに起こりました。
オブジェクト指向プログラミング (OOP) を理解することは重要なマイルストーンでした。クラスとオブジェクトを使用すると、Real Estate Listing API でユーザーやプロパティなどのさまざまなエンティティを処理するための構造化された方法を作成できることに気づきました。これにより、ユーザー、プロパティ、アプリケーションなどの実世界のエンティティをモデル化する必要がある私のプロジェクトの基礎が築かれました。
たとえば、私の API では、Python クラスを使用してユーザー モデルを定義しました。これは、さまざまなエンティティ間の関係と、それらがシステム内でどのように相互作用するかを理解するのに役立ちました。これは私の User モデルの簡略版です:
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')
これは、Python を使用してコード内で現実世界のオブジェクトを表現する方法を初めて実際に体験したもので、私にとってまったく新しい可能性の世界が開かれました。
Python とオブジェクト指向プログラミングの基本を理解したら、Real Estate Listing API の構築を開始することにしました。目標はシンプルでした。不動産所有者が不動産をリストし、潜在的な賃貸人/購入者がお気に入りの不動産を閲覧、申し込み、管理できる API を作成することでした。ただし、この目標を達成するには、単なる基礎以上のものが必要でした。
Flask を使用した RESTful API 開発
Python 用の軽量 Web フレームワークである Flask が、API を構築するための私の頼りになるツールになりました。私は Flask のシンプルさと柔軟性が気に入りました。不必要な複雑さで圧倒されることなく、始めるのに十分な構造を提供してくれました。
私は、GET、POST、PATCH、DELETE などのさまざまな HTTP メソッドを処理するルートを設定することから始めました。これにより、プロパティ、ユーザー、アプリケーション、ウィッシュリストに対するコア CRUD (作成、読み取り、更新、削除) 操作を実装できるようになりました。私がすぐに学んだことの 1 つは、応答で適切な HTTP ステータス コードを返すことの重要性でした。たとえば、成功した POST リクエストは 201 Created ステータスを返す必要がありますが、存在しないリソースに対するリクエストは 404 Not Found を返す必要があります。
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
このスニペットは、さまざまなシナリオを処理する方法を理解し、API がクライアントに有意義なフィードバックを提供していることを確認するのに役立ちました。
データベース対話のための SQLAlchemy の実装
この API を構築するもう 1 つの重要な部分は、Python クラスと SQL データベースの橋渡しをする ORM (オブジェクト リレーショナル マッピング) ツールである SQLAlchemy を使用してデータベースと対話する方法を学習することでした。 SQLAlchemy を選択したのは、Flask とうまく統合でき、テーブル間のリレーションシップの作成や管理など、SQL の複雑な側面の多くを簡素化できるためです。
私が使用した SQLAlchemy の最も有用な技術的側面の 1 つは、多対多のリレーションシップを作成することでした。たとえば、私の Real Estate API では、ユーザーは複数の物件をお気に入りにでき、各物件は多くのユーザーによってお気に入りにされることができます。これをモデル化するために、Wishlist というリンク テーブルを使用して、この多対多の関係を管理しました。
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) )
このスニペットにより、冗長なデータを作成することなく、ユーザーとプロパティの関係を効率的に管理できるようになりました。 SQLAlchemy のリレーションシップ関数を使用すると、これらの接続を簡単にクエリして管理できます。
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
以上がReflective ブログ: 不動産リスティング API を構築する私の旅の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。