Когда я впервые решил создать API листинга недвижимости, я не совсем понимал, во что ввязываюсь. Для разработчика программного обеспечения начального уровня идея разработки API с нуля казалась пугающей. Но мне очень хотелось бросить вызов самому себе и проверить свои знания Python и SQL. Теперь, оглядываясь назад на это путешествие, я поражаюсь тому, как много я узнал – не только о программировании, но и о важности настойчивости, радости решения проблем и волнении, когда проект воплощается в жизнь. .
Эта запись в блоге отражает мой опыт создания приложения API для листинга недвижимости для начинающих. Я поделюсь плюсами и минусами, ключевыми моментами обучения и некоторыми полезными техническими сведениями о Python и SQL, которые сделали этот проект одновременно сложным и полезным.
Мой путь начался с основ Python. Я начал с изучения основ: типов данных, потока управления, функций и объектно-ориентированного программирования. Простота и читабельность Python облегчили мне быстрое понимание этих концепций. Однако настоящая проблема возникла, когда мне пришлось применить эти основы для решения реальных проблем.
Понимание объектно-ориентированного программирования (ООП) стало важной вехой. Я понял, что, используя классы и объекты, я могу создать структурированный способ обработки различных сущностей, таких как пользователи и свойства, в моем API листинга недвижимости. Это заложило основу для моего проекта, в котором мне нужно было моделировать реальные объекты, такие как пользователи, свойства и приложения.
Например, в моем API я определил модель пользователя с использованием классов Python, что помогло мне понять взаимосвязь между различными сущностями и то, как они взаимодействуют внутри системы. Вот упрощенная версия моей модели пользователя:
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 и объектно-ориентированном программировании, я решил начать создавать API листинга недвижимости. Цель была проста: создать API, который позволит владельцам недвижимости размещать списки объектов недвижимости, а потенциальным арендаторам/покупателям просматривать, подавать заявки и управлять своими любимыми объектами недвижимости. Однако для достижения этой цели требовалось гораздо больше, чем просто основы.
Использование Flask для разработки RESTful API
Flask, легкий веб-фреймворк для Python, стал моим любимым инструментом для создания API. Мне понравилась простота и гибкость Flask; он предоставил мне достаточную структуру, чтобы помочь мне начать работу, не перегружая меня ненужной сложностью.
Я начал с настройки маршрутов для обработки различных методов HTTP, таких как GET, POST, PATCH и DELETE. Это позволило мне реализовать основные операции CRUD (создание, чтение, обновление, удаление) для свойств, пользователей, приложений и списков желаний. Одна из вещей, которую я быстро усвоил, — это важность возврата соответствующих кодов состояния HTTP с ответами. Например, успешный запрос POST должен возвращать статус 201 Created, а запрос несуществующего ресурса должен возвращать 404 Not Found.
Вот пример созданного мною маршрута для получения объекта по его идентификатору:
@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 было изучение того, как взаимодействовать с базой данных с помощью SQLAlchemy, инструмента ORM (объектно-реляционное сопоставление), который связывает классы Python и базы данных SQL. Я выбрал SQLAlchemy, потому что он хорошо интегрируется с Flask и упрощает многие сложные аспекты SQL, такие как создание связей между таблицами и управление ими.
Одним из наиболее полезных технических аспектов SQLAlchemy, который я использовал, было создание связей «многие ко многим». Например, в моем 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. Сериализация преобразует сложные типы данных в формат, который можно легко передавать по сети, что важно для создания 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. Теперь я создал полноценный API, использующий Flask, SQLAlchemy и Marshmallow, и у меня гораздо более глубокое понимание веб-разработки.
Одним из самых приятных аспектов этого путешествия было ощущение решения проблем. Каждое сообщение об ошибке, каждая ошибка и каждое неожиданное поведение научили меня чему-то новому. Будь то выяснение, почему маршрут не работает, отладка проблемы с подключением к базе данных или изучение того, как правильно обрабатывать CORS, каждая задача помогала мне расти как разработчику.
Но, пожалуй, самый важный урок, который я усвоил, — это ценность настойчивости. Были времена, когда я чувствовал себя застрявшим или разочарованным, но продолжал двигаться вперед. Я научился разбивать проблемы на более мелкие, более управляемые части и решать их одну за другой.
Один технический аспект, который я нашел особенно полезным, — это настройка совместного использования ресурсов между источниками (CORS) в моем приложении Flask. CORS имеет решающее значение для обеспечения возможности взаимодействия веб-приложений, размещенных в разных доменах, друг с другом. В моем случае это позволило интерфейсу (созданному с помощью React) отправлять запросы к серверному API, не блокируясь политикой браузера того же происхождения.
Вот как я настраиваю CORS в своем приложении Flask:
from flask_cors import CORS app = Flask(__name__) CORS(app)
Просто добавив CORS(приложение), я включил запросы между источниками для всех маршрутов в моем приложении, что сделало интеграцию между моим интерфейсом и серверной частью намного более гладкой. Это небольшая, но мощная функция, о которой должен знать каждый веб-разработчик.
Создание API для листинга недвижимости было сложным, но чрезвычайно полезным опытом. Я узнал так много о Python, SQL и веб-разработке и чувствую себя гораздо более уверенным в своих способностях разработчика. Я с нетерпением жду возможности продолжать строить, учиться и расти в этой области, и мне не терпится увидеть, что нас ждет в будущем.
Для тех, кто только начинает, мой совет прост: продолжайте учиться, продолжайте экспериментировать и не бойтесь совершать ошибки. Каждая задача — это возможность для роста, а каждый проект — это шаг вперед на вашем пути как разработчика.
https://github.com/migsldev/real-estate-api
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3