Узнайте, как создать и протестировать Flask API
В этом руководстве будет создано приложение Flask CRUD, которое позволит пользователям создавать, читать, обновлять и удалять записи базы данных с помощью API. API сможет:
- Добавить новую запись о питомце
- Посмотреть всех питомцев в базе
- Обновить информацию о питомце
- Удалить питомца
Предпосылки
Вы будете использовать следующие инструменты и технологии.
- Python3
- Колба
- Flask-SQLAlchemy
- PostgreSQL
- Почтальон
Что такое API
API (интерфейс прикладного программирования) — это промежуточное программное обеспечение, которое взаимодействует между программами. API используется для связи между клиентом и сервером базы данных в приложении.
HTTP (протокол передачи гипертекста)
Еще одна важная концепция, которую нам нужно понять, — это протокол HTTP, который будет реализовывать API. Протокол HTTP является основой для передачи данных через Интернет. Он описывает способ распространения данных. На приведенной ниже диаграмме представлена стандартная связь с использованием HTTP.
Методы HTTP-запроса
HTTP определяет набор методов, указывающих, какое действие необходимо выполнить. Наиболее распространенные методы HTTP-запроса включают в себя:
GET
: запрос Get используется для получения данных ресурса.POST
: запрос POST используется для отправки ресурса данных на сервер.PUT
: запрос PUT используется для замены существующего ресурса данныхDELETE
: запрос DELETE используется для удаления ресурса данныхPATCH
: запрос PATCH используется для изменения ресурса данных
HTTP-ответы
Когда клиент отправляет запрос на сервер, сервер возвращает ответ HTTP, который состоит из следующих элементов:
STATUS CODES
STATUS MESSAGE
Рассмотрим простой GET-запрос к Google:
import requests response_obj = requests.get('https://www.google.com/') print(response_obj) print(response_obj.status_code)
Когда вы запустите приведенный выше код, вы получите <Response [200]>
и код состояния 200
, который является ответом на успешные запросы.
200 <Response [200]>
Общие коды состояния HTTP включают:
- 200: OK
- 201: Создано
- 304: не изменено
- ошибка 400, неверный запрос
- 401: Неавторизованный
- 404 Не Найдено
- 405: метод не разрешен
- 500 - внутренняя ошибка сервера
Приложение Flask CRUD с Postgresql
Flask — это простая микроинфраструктура Python, которая позволяет разработчикам легко создавать приложения, поскольку для нее не требуются инструменты и библиотеки.
Создайте каталог проекта,
mkdir flaskcrud
Создать и активировать виртуальную среду
cd flaskcrud
python3 -m venv env
source env/bin/activate
где env
— имя виртуальной среды. Виртуальные среды гарантируют централизованное управление зависимостями проекта. Установите Flask
и Flask-Sqlalchemy
с помощью pip
pip install flask pip install -U Flask-SQLAlchemy
Flask-SQLAlchemy — это расширение для Flask, добавляющее поддержку SQLAlchemy в ваше приложение. Он направлен на упрощение использования SQLAlchemy с Flask, предоставляя полезные значения по умолчанию и дополнительные помощники, облегчающие выполнение общих задач.
Поскольку мы собираемся использовать PostgreSQL, для базы данных давайте установим библиотеку драйверов psycopg2 с помощью pip.
pip install psycopg2
В вашей среде разработки уже должен быть установлен PostgreSQL. В этом гайде показано, как установить его на разные операционные системы.
В каталоге проекта создайте файл app.py
touch app.py
Open app.py
, импортируйте Flask
и создайте экземпляр приложения flask.
from flask import Flask app = Flask(__name__)
Создать новую базу данных
PostgreSQL поставляется с psql, интерактивной терминальной программой, которая позволяет вам взаимодействовать с сервером базы данных PostgreSQL. Подключитесь к серверу базы данных PostgreSQL.
sudo su postgres psql
Команда будет отличаться в вашей операционной системе, но принципы остаются прежними. Вам будет представлен psql
терминал, подобный этому
psql (9.5.14) Type "help" for help. postgres=#
Создать базу данных:
CREATE DATABASE pets;
Создать роль
CREATE ROLE john WITH LOGIN PASSWORD ‘password’;
Предоставьте доступ к базе данных пользователю, которого вы создали выше.
GRANT ALL PRIVILEGES ON DATABASE pets TO john;
Конфигурации базы данных
Давайте настроим конфигурации базы данных. Загрузите конфигурацию базы данных, передав DATABASE_URI
, а затем создайте объект SQLAlchemy, передав его приложению.
from flask_sqlalchemy import SQLAlchemy app.config['SQLALCHEMY_DATABASE_URI'] = 'postgresql+psycopg2://john:password@localhost/pets' db = SQLAlchemy(app)
app.py
пока должно выглядеть так:
Модели баз данных
Модели представляют объекты в приложении. объекты, в данном случае, относятся к питомцам, которых мы хотим сохранить в нашем приложении. Создайте класс Pet и объявите следующие поля:
id
pet_name
pet_type
pet_description
Экземпляр db
предоставляет базовый класс Model
, который используется для создания моделей объявления. Функция __repr__
создает удобочитаемую версию объектов модели.
Чтобы создать фактическую базу данных, инициализируйте базу данных с помощью команды db.create_all()
.
db.create_all()
Кроме того, вы также можете создать базу данных из терминала.
python3.8 from app import db db.create_all()
Запустите сервер.
Для запуска приложения в среде разработки.
export FLASK_APP=app export FLASK_en=development flask run
Flask_APP=app
указывает, в какой папке находится приложение. FLASK_ENV=development
позволяет серверу перезапускаться каждый раз, когда мы вносим изменения, поэтому нам не нужно перезапускать сервер. Затем flask run запускает сервер разработки по адресу 127.0.0.1:5000. Вы должны увидеть это после flask run
Если вы заходите на 127.0.0.1:5000, вы должны получить ошибку Not Found
. Это потому, что мы не создали никаких конечных точек
Конечные точки API
Простая конечная точка API в flask выглядит так.
from flask import Flask,jsonify @app.route('/') def index(): return jsonify({"message":"Welcome to my site"})
Мы используем декоратор @app.route
для обработки запросов и определяем индекс функции, который возвращает сообщение в формате json.
CORS (обмен ресурсами между источниками)
Скорее всего, вы столкнулись с этой ошибкой при разработке приложений.
No 'Access-Control-Allow-Origin' header is present on the requested resource
CORS — это мера безопасности, которая блокирует запросы от ресурсов с разными доменными именами или разными протоколами. Он действует для предотвращения злонамеренных атак со стороны скриптов javascript, которые могут быть встроены в запрос.
CORS разрешает веб-странице получать доступ к данным с другой веб-страницы только в том случае, если они находятся в одном домене.
Колба-CORS
Flask поставляется с расширением FLASK-CORS, которое мы будем использовать в этом руководстве для реализации CORS. Чтобы установить расширение, используйте pip.
pip install -U flask-cors
Добавьте его в приложение, передав его экземпляру приложения.
from flask-cors import CORS CORS(app)
Чтобы добавить перекрестное происхождение на определенный маршрут, вы просто добавляете декоратор @cross-origin()
перед маршрутом следующим образом.
@cross-origin() @app.route('/pets') def pets() pass
POST-конечная точка
Создайте маршрут, который будет использоваться для добавления записей о домашних животных в базу данных.
В приведенном выше коде мы указываем метод POST
. Метод create_pet
извлечет pet_name
, pet_type
, pet_age
и pet_description
из тела запроса, а затем вставит записи в базу данных.
Теперь, чтобы протестировать API, используйте Postman.
ПОЛУЧИТЬ конечную точку
Мы будем использовать метод GET, чтобы вернуть все записи о домашних животных.
Вот GET API с использованием Postman.
ПАТЧ Конечная точка
Мы будем использовать метод PATCH
для обновления сведений о питомце. Можно обновить только возраст и описание питомца. Мы используем query.get()
, чтобы получить экземпляр питомца, а затем обновить его в базе данных.
Вот PATCH API с использованием Postman.
УДАЛИТЬ Конечная точка
Мы будем использовать метод DELETE для удаления питомца из базы данных. Сначала мы передаем идентификатор питомца в URL. Затем мы используем query.get()
, чтобы получить экземпляр питомца, а затем удалить его из базы данных. query.get()
возвращает только один объект.
Вот API DELETE с использованием Postman.
Заключение
В этом руководстве рассказывается, как создать CRUD API с помощью Flask. Если вы хотите узнать, как обрабатывать исключения в приложении flask, вы можете следовать этому руководству: