「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Reflective ブログ: 不動産リスティング API を構築する私の旅

Reflective ブログ: 不動産リスティング API を構築する私の旅

2024 年 11 月 3 日に公開
ブラウズ:372

Reflective Blog: My Journey Building a Real Estate Listing API

Reflective ブログ: 不動産リスティング API を構築する私の旅


導入

私が初めて Real Estate Listing API の構築に着手したとき、何をやっているのかよくわかりませんでした。初心者レベルのソフトウェア開発者にとって、API をゼロから開発するという考えは恐ろしいものに思えました。しかし、私は自分自身に挑戦し、Python と SQL の知識を試してみたいと熱望していました。今、この旅を振り返ると、コーディングだけでなく、忍耐力の重要性、問題解決の喜び、プロジェクトが実現するのを見るスリルについても学んだことに驚いています。 .

このブログ投稿は、この初心者向け不動産リスティング API アプリを構築した私の経験を反映したものです。このプロジェクトを挑戦的かつやりがいのあるものにした、Python と SQL に関する良い点と悪い点、重要な学習の瞬間、およびいくつかの有用な技術的洞察を共有します。


はじめに: Python の基礎を学ぶ

私の旅は 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 を使用して現実世界のオブジェクトをコードで表現する方法を初めて実際に体験したもので、まったく新しい可能性の世界が私に開かれました。


さらに詳しく: 不動産 API の構築

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/', 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 による連載

もう 1 つの重要な学習経験は、Flask-Marshmallow を使用して SQLAlchemy モデルを JSON 形式にシリアル化することでした。シリアル化は、複雑なデータ型をネットワーク経由で簡単に転送できる形式に変換します。これは API の構築に不可欠です。 Marshmallow スキーマを使用して、モデルを JSON に変換する方法を定義しました。私のプロパティ モデルのスキーマの例は次のとおりです:

class PropertySchema(ma.SQLAlchemyAutoSchema):
    class Meta:
        model = Property
        load_instance = True

property_schema = PropertySchema()
properties_schema = PropertySchema(many=True)

Marshmallow を使用すると、モデルを JSON に変換するプロセスが簡素化され、API のコア機能の構築に集中できるようになりました。


振り返る: 旅を振り返る

振り返ってみると、ほんの短期間でどれだけ遠くまで到達したかがわかります。始めたとき、私は Python の基本をほとんど知りませんでした。今では、Flask、SQLAlchemy、Marshmallow を使用する本格的な API を構築し、Web 開発についての理解がさらに深まりました。

この旅で最もやりがいのある側面の 1 つは、問題を解決したという感覚です。すべてのエラー メッセージ、すべてのバグ、すべての予期しない動作が私に新しいことを教えてくれました。ルートが機能しない理由の解明、データベース接続の問題のデバッグ、CORS の適切な処理方法の学習など、それぞれの課題が開発者としての私の成長を助けてくれました。

しかし、おそらく私が学んだ最も重要な教訓は、粘り強さの価値です。行き詰まりを感じたり、イライラしたりすることもありましたが、それでも前に進み続けました。私は、問題をより小さく、より管理しやすい部分に分割し、1 つずつ取り組むことを学びました。


有用な技術的洞察: Flask CORS 構成

私が特に便利だと感じた技術的な側面の 1 つは、Flask アプリケーションでの Cross-Origin Resource Sharing (CORS) の構成でした。 CORS は、異なるドメインでホストされている Web アプリケーションが相互に通信できるようにするために重要です。私の場合、ブラウザの同一生成元ポリシーによってブロックされることなく、フロントエンド (React で構築) がバックエンド API にリクエストを送信できるようになりました。

Flask アプリで CORS を設定する方法は次のとおりです:

from flask_cors import CORS

app = Flask(__name__)
CORS(app)

CORS(app) を追加するだけで、アプリ内のすべてのルートに対してクロスオリジン リクエストが有効になり、フロントエンドとバックエンドの間の統合がよりスムーズになりました。これは、すべての Web 開発者が知っておくべき小さいですが強力な機能です。


結論

不動産リスティング API の構築は、困難ではありましたが、非常にやりがいのある経験でした。 Python、SQL、Web 開発について多くのことを学び、開発者としての自分の能力にずっと自信が持てるようになりました。私はこの分野で構築、学習、成長を続けることに興奮しており、将来がどうなるかを見るのが待ちきれません。

これから始めようという人への私のアドバイスはシンプルです。学び続け、実験を続け、間違いを恐れないでください。すべての課題は成長の機会であり、すべてのプロジェクトは開発者としての旅の一歩前進です。

https://github.com/migsldev/real-estate-api

リリースステートメント この記事は次の場所に転載されています: https://dev.to/migsldev/reflective-blog-my-journey-building-a-real-estate-listing-api-390o?1 侵害がある場合は、study_golang@163 までご連絡ください。 .comを削除してください
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3