Python REST APIs With Flask, Connexion, and SQLAlchemy
- Python REST APIs With Flask, Connexion, and SQLAlchemy‑Part 1
Если вы писали web‑приложения, то, наверняка знаете, как сделать HTTP‑запрос на сервер (программное обеспечение)એ для получения данных и заполнения динамических частей своего приложения.
Цель этой статьи — показать, как использовать Python 3, Flask и Connexion для создания полезных APIએ RESTએ, которые могут включать проверку ввода и вывода. В качестве бонуса — ссылка на документацию Swagger. Кроме того, мы создадим простое, но полезное одностраничное web‑приложение, которое продемонстрирует возможности APIએ с JavaScriptએ при обновлении Document Object Modelએ — DOM.
APIએ RESTએ, который мы создадим, будет обслуживать простую таблицу с данными о людях, где для каждого будет указана фамилия, а любые обновления будут помечаться новой отметкой времени.
Данные могут быть представлены в базе данных, сохранены в файле или доступны через некоторый сетевой протокол, но наша структура данных будет просто располагаться в оперативной памяти. Одним из назначений создания API является скрытие деталей реализации структуры данных и отделение их от приложения.
- Python REST APIs With Flask, Connexion, and SQLAlchemy‑Part 2
В первой части этой серии вы использовали Flaskએ и Connexionએ для создания REST API, обеспечивающего операции CRUD для простой структуры в памяти, называемой PEOPLE. Это помогло продемонстрировать, как модуль Connexion помогает вам создавать хороший REST API вместе с интерактивной документацией.
Как отмечалось в комментариях к части 1, структура PEOPLE переинициализируется каждый раз при перезапуске приложения. В этой статье вы узнаете, как сохранить структуру PEOPLE и действия, которые API обеспечивает, для базы данных с использованием SQLAlchemyએ и Marshmallow.
SQLAlchemy предоставляет объектно-реляционную модель (ORMએ), которая хранит объекты Python для представления данных объекта в базе данных. Это может помочь вам продолжать мыслить на Pythonic и не беспокоиться о том, как данные объекта будут представлены в базе данных.
Marshmallow обеспечивает функциональность для сериализации и десериализации объектов Python по мере их поступления в наш REST API на основе JSONએ. Marshmallow преобразует экземпляры класса Python в объекты, которые можно преобразовать в JSON.
- Python REST APIs With Flask, Connexion, and SQLAlchemy‑Part 3
Во второй части этой серии вы добавили возможность сохранять изменения, сделанные с помощью API REST, в базу данных с помощью SQLAlchemy и узнали, как сериализовать эти данные для API REST с помощью Marshmallow. Соединение REST API с базой данных, чтобы приложение могло вносить изменения в существующие данные и создавать новые, прекрасно и делает приложение намного более полезным и надежным.
Однако это только часть возможностей, предоставляемых базой данных. Еще более мощная особенность — это часть R систем СУБД: отношения. В базе данных отношения — это способность соединять две или более таблицы осмысленным образом. В этой статье вы узнаете, как реализовать отношения и превратить свою базу данных Person в веб-приложение для мини-блогов.
- Python REST APIs With Flask, Connexion, and SQLAlchemy‑Part 4
В третьей части этой серии вы добавили связи к REST API и к базе данных, которая его поддерживает. Это дало вам мощный инструмент, который вы можете использовать для создания интересных программ, которые отправляют постоянные данные, а также отношения между этими данными в систему базы данных. Наличие REST API дает вам возможность создать одностраничное приложение (SPA) с HTMLએ, CSSએ и JavaScriptએ. Это хорошая отправная точка перед переходом к более мощным интерфейсным фреймворкам, таким как Angularએ или Reactએ.
Пример скрипта с новым плагином:
def read_one(person_id): """ This function responds to a request for /api/people/{person_id} with one matching person from people :param person_id: ID of person to find :return: person matching ID """ # Get the person requested person = Person.query \ .filter(Person.person_id == person_id) \ .one_or_none() # Did we find a person? if person is not None: # Serialize the data for the response person_schema = PersonSchema() return person_schema.dump(person).data # Otherwise, nope, didn't find that person else: abort(404, 'Person not found for Id: {person_id}'.format(person_id=person_id))