Python является одним из самых простых для чтения и написания языков программирования всех времен. За прошедшие годы популярность Python только возросла, и он широко используется в разработке веб-приложений, создании сценариев, создании игр, научных вычислениях и т. Д.
Flask — это платформа веб-приложений Python, которая набирает популярность благодаря простоте использования для начинающих Python. В этом уроке мы рассмотрим EVE , инфраструктуру построения REST API, основанную на Flask , MongoDB и Redis. Из официальных документов:
При поддержке Flask, MongoDB, Redis и благих намерений Eve позволяет без особых усилий создавать и развертывать полностью настраиваемые, полнофункциональные веб-службы RESTful.
Что мы будем создавать
В этом уроке мы увидим, как создавать API REST с использованием инфраструктуры EVE. Далее, используя AngularJS, мы спроектируем интерфейс для простого приложения и сделаем его функциональным, используя API REST, созданные с использованием EVE. В этом уроке мы реализуем следующую функциональность:
- Создать пользовательский API
- Проверить пользовательский API
- API Добавить товары
- API удаления элементов
- API обновлений элементов
Начиная
Установка
Мы будем использовать pip для установки EVE.
1
|
pip install eve
|
Мы будем использовать MongoDB
качестве базы данных. Посмотрите официальные документы для установки в соответствии с вашей системой.
Создание базового API
Создайте папку проекта с именем PythonAPI
. Перейдите к PythonAPI
и создайте файл с именем api.py
Внутри api.py
импортируйте EVE
и создайте объект EVE.
1
2
|
from eve import Eve
app = Eve()
|
Затем запустите app
когда программа выполняется как основная программа.
1
2
3
4
5
|
from eve import Eve
app = Eve()
if __name__ == ‘__main__’:
app.run()
|
Запустите ваш MongoDB
используя следующую команду:
1
|
mongod —dbpath= <PATH-TO> /data/db/
|
Как видите, нам нужно указать путь к файлам БД. Просто создайте data/db
в вашей файловой системе и выполните приведенную выше команду.
Наряду с запущенным экземпляром MongoDB
, EVE требуется файл конфигурации с информацией о ресурсах API. Поэтому в папке PythonAPI
создайте другой файл с именем settings.py
и добавьте следующий код:
1
|
DOMAIN = {‘user’: {}}
|
Приведенный выше код информирует EVE, что ресурс для user
доступен.
Сохраните все файлы и запустите api.py
:
1
|
python api.py
|
API должен быть онлайн, как показано:
Мы будем использовать REST-клиент Postman для отправки запросов к API. Это бесплатно и может быть установлено простым щелчком мыши. Закончив установку, запустите приложение, введите URL-адрес API ( http://127.0.0.1:5000/ ) и нажмите «Отправить». У вас должен быть ответ как показано:
Поскольку мы не вызывали какой-либо конкретный ресурс API, он покажет все доступные ресурсы. Теперь попробуйте вызвать user
ресурс, и у вас должен быть ответ, специфичный для user
.
Создать и проверить пользовательский API
Создать пользовательский API
Мы начнем с создания API для создания или регистрации пользователя для нашего приложения. У пользователя будут определенные поля, такие как First Name
, Last Name
, Username
, Password
и Phone Number
.
Итак, сначала нам нужно определить схему для пользователя. Схема определяет поля и типы данных ключевых полей. Откройте файл settings.py
и измените DOMAIN
, определив схему, как показано ниже:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
|
DOMAIN = {
‘user’: {
‘schema’: {
‘firstname’: {
‘type’: ‘string’
},
‘lastname’: {
‘type’: ‘string’
},
‘username’: {
‘type’: ‘string’,
‘unique’: True
},
‘password’: {
‘type’: ‘string’
},
‘phone’: {
‘type’: ‘string’
}
}
}
}
|
Как видно из приведенного выше кода, мы определили ключевые поля, необходимые для создания пользователя, и его тип данных, определенный в схеме. Сохраните изменения и выполните api.py
От Postman Client попробуйте сделать запрос POST вместе с необходимыми параметрами для http://127.0.0.1/user, как показано:
По запросу пользователя POST возникла ошибка 405 Method Not Allowed
. По умолчанию EVE принимает только запросы GET. Если мы хотим использовать любой другой метод, мы должны определить его явно. Откройте settings.py
и определите методы ресурса, как показано:
1
|
RESOURCE_METHODS = [‘GET’, ‘POST’]
|
Сохраните изменения и выполните api.py
Теперь попробуйте снова POST
для пользователя, и вы должны получить следующий ответ:
Как вы можете видеть выше, запрос POST был успешным. Мы не определили конфигурации базы данных в нашем settings.py
, поэтому EVE выполнила запрос, используя работающий экземпляр MongoDB
. Давайте войдем в оболочку MongoDB
и увидим вновь созданную запись. Запустив экземпляр MongoDB, запустите оболочку mongo:
1
|
mongo
|
Оказавшись внутри оболочки mongo
, перечислите все доступные базы данных.
1
|
show databases;
|
Там должна быть база данных eve
. Переключитесь на базу данных eve
.
1
|
use eve;
|
Выполните команду show
чтобы получить список таблиц в базе данных eve
.
1
|
show tables;
|
В перечисленных таблицах должна быть таблица с именем user
. Выведите список записей из user
таблицы, используя следующую команду:
1
|
db.user.find()
|
Вот выбранные записи из пользовательских таблиц:
Проверить пользовательский API
Далее мы создадим API для проверки существующего пользователя. Обычно, если мы делаем запрос get
к конечной точке пользователя ( http://127.0.0.1:5000/user ), он выдаст сведения обо всех зарегистрированных пользователях из базы данных. Нам нужно реализовать две вещи здесь. Во-первых, нам нужно аутентифицировать пользователя, используя имя и пароль, а во-вторых, нам нужно вернуть данные пользователя из базы данных при успешной аутентификации.
Чтобы получить подробности, основанные на имени, нам нужно добавить дополнительное поле поиска в DOMAIN
в settings.py
.
1
2
3
4
|
‘additional_lookup’: {
‘url’: ‘regex(«[\w]+»)’,
‘field’: ‘username’,
}
|
Как видно из приведенного выше кода, мы добавили поле поиска для username
. Теперь, когда GET-запрос отправляется на http://127.0.0.1:5000/user/
<username>
он возвращает информацию о пользователе с конкретным username
. При отправке запроса конкретному пользователю мы также отправим username
и password
для аутентификации.
Мы будем выполнять базовую аутентификацию для проверки конкретного пользователя на основе имени пользователя и пароля. Во-первых, нам нужно импортировать класс Basic Auth
из EVE. Создайте класс с именем Authenticate
для реализации аутентификации, как показано:
1
2
3
4
5
|
from eve.auth import BasicAuth
class Authenticate(BasicAuth):
def check_auth(self, username, password, allowed_roles, resource,
method):
|
Теперь, когда ресурс — user
а метод запроса — GET
, мы аутентифицируем пользователя. При успешной аутентификации будут возвращены пользовательские данные пользователя с именем в конечной точке API. Мы также ограничим создание пользователей, указав имя пользователя и пароль. Итак, если метод POST, а конечная точка API — пользователь, мы проверим и подтвердим имя пользователя и пароль. Итак, вот полный класс Authenticate
:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
|
class Authenticate(BasicAuth):
def check_auth(self, username, password, allowed_roles, resource,
method):
if resource == ‘user’ and method == ‘GET’:
user = app.data.driver.db[‘user’]
user = user.find_one({‘username’: username,’password’:password})
if user:
return True
else:
return False
elif resource == ‘user’ and method == ‘POST’:
return username == ‘admin’ and password == ‘admin’
else:
return True
|
Нам нужно передать имя класса Authenticate
при запуске API. Поэтому измените исходный код API, как показано ниже:
1
2
3
|
if __name__ == ‘__main__’:
app = Eve(auth=Authenticate)
app.run()
|
Сохраните все изменения и выполните api.py
Попробуйте отправить базовый запрос авторизации с именем пользователя и паролем от Почтальона по адресу http://127.0.0.1/user/username (замените имя пользователя любым другим существующим именем пользователя). При успешной аутентификации вы должны получить данные пользователя в ответ, как показано ниже:
Добавить, удалить и обновить элементы
Добавить элемент API
Чтобы создать API для добавления элементов, все, что нам нужно сделать, — это создать новую схему для элемента в settings.py
.
01
02
03
04
05
06
07
08
09
10
|
‘item’: {
‘schema’: {
‘name’:{
‘type’: ‘string’
},
‘username’: {
‘type’: ‘string’
}
}
}
|
API Add Item поможет каждому зарегистрированному пользователю добавить элемент. Мы будем сохранять элемент вместе с именем пользователя, который ввел элемент. Сохраните изменения и попробуйте выполнить запрос POST по адресу http://127.0.0.1/item, как показано:
API Удалить элемент
Для удаления элемента, созданного пользователем, все, что нам нужно сделать, это вызвать конечную точку элемента /item_id
. Но простой вызов запроса DELETE не удалит элемент. Чтобы удалить элемент, мы также должны предоставить _etag
связанный с конкретным элементом. Как только item id
и _etag
совпадают, элемент удаляется из базы данных. Вот как метод DELETE вызывается в конечной точке элемента.
Обновить элемент API
API обновления аналогичен API удаления. Все, что нам нужно сделать, это отправить запрос PATCH с item id
и _etag
и полями формы, которые необходимо обновить. Вот как обновляются детали товара:
Вывод
В этом уроке мы увидели, как начать создавать API с использованием среды Python EVE . Мы создали несколько базовых API для операций CRUD, которые мы будем использовать в следующей части серии при создании приложения AngularJS.
Исходный код из этого урока доступен на GitHub .
Дайте нам знать ваши мысли в комментариях ниже!