عندما شرعت في إنشاء واجهة برمجة تطبيقات قائمة العقارات لأول مرة، لم أكن أعرف تمامًا ما الذي كنت سأقوم به. كمطور برامج مبتدئ، بدت فكرة تطوير واجهة برمجة التطبيقات (API) من الصفر مخيفة. لكنني كنت حريصًا على تحدي نفسي واختبار معرفتي بـ Python وSQL. الآن، بالنظر إلى هذه الرحلة، أنا مندهش من مقدار ما تعلمته، ليس فقط عن البرمجة، ولكن أيضًا عن أهمية المثابرة، ومتعة حل المشكلات، وتشويق رؤية المشروع ينبض بالحياة. .
يعد منشور المدونة هذا انعكاسًا لتجربتي في إنشاء تطبيق Real Estate Listing API للمبتدئين. سأشارك النجاحات والانخفاضات، ولحظات التعلم الرئيسية، وبعض الأفكار الفنية المفيدة حول Python وSQL التي جعلت هذا المشروع صعبًا ومجزيًا.
بدأت رحلتي بأساسيات لغة بايثون. لقد بدأت بتعلم الأساسيات: أنواع البيانات، وتدفق التحكم، والوظائف، والبرمجة الموجهة للكائنات. إن بساطة لغة بايثون وسهولة قراءتها جعلت من السهل علي فهم هذه المفاهيم بسرعة. ومع ذلك، جاء التحدي الحقيقي عندما اضطررت إلى تطبيق هذه الأساسيات لحل مشاكل العالم الحقيقي.
كان فهم البرمجة الموجهة للكائنات (OOP) علامة بارزة. أدركت أنه باستخدام الفئات والكائنات، يمكنني إنشاء طريقة منظمة للتعامل مع الكيانات المختلفة، مثل المستخدمين والخصائص، في واجهة برمجة تطبيقات قائمة العقارات الخاصة بي. لقد وضع هذا الأساس لمشروعي، حيث كنت بحاجة إلى تصميم نماذج لكيانات العالم الحقيقي مثل المستخدمين والخصائص والتطبيقات.
على سبيل المثال، في واجهة برمجة التطبيقات الخاصة بي، قمت بتحديد نموذج مستخدم باستخدام فئات بايثون، مما ساعدني على فهم العلاقة بين الكيانات المختلفة وكيفية تفاعلها داخل النظام. إليك نسخة مبسطة من نموذج المستخدم الخاص بي:
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 والبرمجة الشيئية، قررت البدء في إنشاء Real Estate Listing API. كان الهدف بسيطًا: إنشاء واجهة برمجة تطبيقات تسمح لأصحاب العقارات بإدراج العقارات، والمستأجرين/المشترين المحتملين لتصفح عقاراتهم المفضلة وتطبيقها وإدارتها. ومع ذلك، فإن تحقيق هذا الهدف يتطلب أكثر بكثير من مجرد الأساسيات.
استخدام Flask لتطوير RESTful API
أصبح Flask، وهو إطار عمل ويب خفيف الوزن لـ Python، هو أداتي المفضلة لبناء واجهة برمجة التطبيقات. لقد أحببت بساطة ومرونة Flask؛ لقد وفرت لي هيكلًا كافيًا لمساعدتي في البدء دون إرباكي بتعقيدات غير ضرورية.
لقد بدأت بإعداد مسارات للتعامل مع طرق HTTP المختلفة مثل GET وPOST وPATCH وDELETE. سمح لي هذا بتنفيذ عمليات CRUD الأساسية (الإنشاء والقراءة والتحديث والحذف) للخصائص والمستخدمين والتطبيقات وقوائم الرغبات. أحد الأشياء التي تعلمتها بسرعة هو أهمية إرجاع رموز حالة HTTP المناسبة مع الاستجابات. على سبيل المثال، يجب أن يُرجع طلب POST الناجح حالة الإنشاء 201، بينما يجب أن يُرجع طلب المورد غير الموجود الحالة 404 لم يتم العثور عليه.
إليك مثال على المسار الذي قمت بإنشائه لجلب خاصية من خلال معرفها:
@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
ساعدني هذا المقتطف على فهم كيفية التعامل مع السيناريوهات المختلفة والتأكد من أن واجهة برمجة التطبيقات تقدم تعليقات مفيدة للعميل.
تطبيق SQLAlchemy لتفاعلات قاعدة البيانات
كان الجزء المهم الآخر من بناء واجهة برمجة التطبيقات هذه هو تعلم كيفية التفاعل مع قاعدة البيانات باستخدام SQLAlchemy، وهي أداة ORM (رسم الخرائط الارتباطية للكائنات) التي تربط بين فئات Python وقواعد بيانات SQL. لقد اخترت SQLAlchemy لأنه يتكامل بشكل جيد مع Flask ويبسط العديد من الجوانب المعقدة لـ SQL، مثل إنشاء وإدارة العلاقات بين الجداول.
كان أحد الجوانب التقنية الأكثر فائدة في SQLAlchemy التي استخدمتها هو إنشاء علاقات متعدد إلى متعدد. على سبيل المثال، في My Real Estate API، يمكن للمستخدمين تفضيل العديد من العقارات، ويمكن للعديد من المستخدمين تفضيل كل عقار. لنمذجة ذلك، استخدمت جدول ارتباط يسمى قائمة الرغبات لإدارة علاقة متعدد بمتعدد:
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
كانت تجربة التعلم المهمة الأخرى هي استخدام Flask-Marshmallow لتسلسل نماذج SQLAlchemy الخاصة بي إلى تنسيق JSON. يعمل التسلسل على تحويل أنواع البيانات المعقدة إلى تنسيق يمكن نقله بسهولة عبر الشبكة، وهو أمر ضروري لبناء واجهات برمجة التطبيقات. لقد استخدمت مخططات Marshmallow لتحديد كيفية تحويل نماذجي إلى JSON. فيما يلي مثال للمخطط لنموذج الملكية الخاص بي:
class PropertySchema(ma.SQLAlchemyAutoSchema): class Meta: model = Property load_instance = True property_schema = PropertySchema() properties_schema = PropertySchema(many=True)
لقد أدى استخدام Marshmallow إلى تبسيط عملية تحويل النماذج الخاصة بي إلى JSON، مما سمح لي بالتركيز على بناء الوظائف الأساسية لواجهة برمجة التطبيقات (API).
إذا نظرنا إلى الوراء، أدرك إلى أي مدى وصلت في وقت قصير. عندما بدأت، كنت بالكاد أعرف أساسيات بايثون. لقد قمت الآن ببناء واجهة برمجة تطبيقات كاملة تستخدم Flask وSQLAlchemy وMarshmallow، ولدي فهم أعمق بكثير لتطوير الويب.
كان الشعور بحل المشكلات من أكثر الجوانب الممتعة في هذه الرحلة. كل رسالة خطأ، وكل خطأ، وكل سلوك غير متوقع علمني شيئًا جديدًا. سواء كان الأمر يتعلق بمعرفة سبب عدم عمل المسار، أو تصحيح مشكلة اتصال قاعدة البيانات، أو تعلم كيفية التعامل مع CORS بشكل صحيح، فقد ساعدني كل تحدٍ على النمو كمطور.
ولكن ربما يكون الدرس الأكثر أهمية الذي تعلمته هو قيمة المثابرة. كانت هناك أوقات شعرت فيها بالتعثر أو الإحباط، لكنني واصلت المضي قدمًا. لقد تعلمت تقسيم المشكلات إلى أجزاء أصغر يسهل التحكم فيها ومعالجتها واحدة تلو الأخرى.
أحد الجوانب الفنية التي وجدتها مفيدة بشكل خاص هو تكوين مشاركة الموارد عبر الأصل (CORS) في تطبيق Flask الخاص بي. يعد CORS أمرًا ضروريًا للسماح لتطبيقات الويب المستضافة في مجالات مختلفة بالتواصل مع بعضها البعض. في حالتي، سمحت للواجهة الأمامية (التي تم إنشاؤها باستخدام React) بتقديم طلبات إلى واجهة برمجة تطبيقات الواجهة الخلفية دون أن يتم حظرها بواسطة سياسة المصدر نفسه للمتصفح.
إليك كيفية إعداد CORS في تطبيق Flask الخاص بي:
from flask_cors import CORS app = Flask(__name__) CORS(app)
بمجرد إضافة CORS(app)، قمت بتمكين الطلبات المشتركة لجميع المسارات في تطبيقي، مما جعل التكامل بين الواجهة الأمامية والخلفية أكثر سلاسة. هذه ميزة صغيرة ولكنها قوية يجب أن يعرفها كل مطور ويب.
كان إنشاء واجهة برمجة تطبيقات قائمة العقارات تجربة صعبة ولكنها مجزية للغاية. لقد تعلمت الكثير عن Python وSQL وتطوير الويب، وأشعر بثقة أكبر في قدراتي كمطور. أنا متحمس لمواصلة البناء والتعلم والنمو في هذا المجال، ولا أستطيع الانتظار لرؤية ما يخبئه المستقبل.
بالنسبة لأي شخص بدأ للتو، نصيحتي بسيطة: استمر في التعلم، واستمر في التجربة، ولا تخف من ارتكاب الأخطاء. يمثل كل تحدٍ فرصة للنمو، وكل مشروع يمثل خطوة إلى الأمام في رحلتك كمطور.
https://github.com/migsldev/real-estate-api
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3