Узнайте, как создать и протестировать 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, вы можете следовать этому руководству: