Python е един от най-лесните за четене и писане езици за програмиране на всички времена. През годините популярността на Python само нараства и се използва широко в разработката на уеб приложения, скриптове, създаване на игри, научни изчисления и т.н.
Flask е рамка за уеб приложения на Python, която набира популярност поради лесната си употреба за начинаещи в Python. В този урок ще разгледаме EVE, рамка за изграждане на REST API, базирана на Flask, MongoDB и Redis. От официалните документи:
Осъществено от Flask, MongoDB, Redis и добри намерения Eve позволява без усилие да изгражда и внедрява изключително адаптивна, напълно функционална RESTful уеб услуга.
Какво ще създадем
В този урок ще видим как да изградим REST API, използвайки рамката EVE. След това, използвайки AngularJS, ще проектираме предния край за просто приложение и ще го направим функционален, като използваме REST API, изградени с EVE. В този урок ще приложим следната функционалност:
- Създаване на потребителски API
- Проверка на потребителския API
- API за добавяне на елементи
- API за изтриване на елементи
- API за актуализиране на елементи
Първи стъпки
Инсталиране
Ще използваме pip, за да инсталираме EVE.
pip install eve
Ще използваме MongoDB
като база данни. Разгледайте официалните документи за инсталиране според вашата система.
Създаване на основния API
Създайте папка на проекта, наречена PythonAPI
. Придвижете се до PythonAPI
и създайте файл, наречен api.py
. Вътре в api.py
импортирайте EVE
и създайте EVE обект.
from eve import Eve app = Eve()
След това стартирайте app
когато програмата се изпълнява като основна програма.
from eve import Eve app = Eve() if __name__ == '__main__': app.run()
Стартирайте вашия MongoDB
като използвате следната команда:
mongod --dbpath= <PATH-TO> /data/db/
Както можете да видите, трябва да посочим път за db файловете. Просто създайте data/db
във вашата файлова система и изпълнете горната команда.
Заедно с екземпляр на MongoDB
работи, EVE изисква конфигурационен файл с информация за ресурсите на API. Така че в PythonAPI
папка създайте друг файл, наречен settings.py
и добавете следния код:
DOMAIN = {'user': {}}
Горният код информира EVE, че е ресурс за user
е наличен.
Запазете всички файлове и стартирайте api.py
:
python api.py
API трябва да е онлайн, както е показано:
Ще използваме Postman REST Client за изпращане на заявки към API. Той е безплатен и може да се инсталира с едно щракване. След като приключите с инсталацията, стартирайте приложението и въведете URL адреса на API (http://127.0.0.1:5000/) и щракнете върху изпращане. Трябва да получите отговора, както е показано:
Тъй като не сме извикали конкретен API ресурс, той ще покаже всички налични ресурси. Сега опитайте да се обадите на user
ресурс и трябва да имате отговора, специфичен за потребителя
.
Създаване и валидиране на потребителски API
Създаване на потребителски API
Ще започнем с изграждането на API за създаване или регистрация на потребител за нашето приложение. Потребителят ще има определени полета като First Name
, Фамилия
, Потребителско име
, Парола
и Телефонен номер
.
Така че първо ще трябва да дефинираме схема за потребител. Схемата дефинира полетата и типовете данни на ключовите полета. Отворете settings.py
и променете DOMAIN
чрез дефиниране на схема, както е показано :
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 Метод не е разрешен
грешка. По подразбиране EVE приема само GET заявки. Ако искаме да използваме друг метод, трябва да го дефинираме изрично. Отворете settings.py
и дефинирайте методите на ресурсите, както е показано :
RESOURCE_METHODS = ['GET', 'POST']
Запазете промените и изпълнете api.py
. Сега опитайте отново да POST
на потребител и трябва да получите следния отговор:
Както можете да видите, горната POST заявка беше успешна. Не сме дефинирали конфигурациите на базата данни в нашия settings.py
, така че EVE завърши заявката, използвайки работещия екземпляр на MongoDB
. Нека влезем в MongoDB
shell и вижте новосъздадения запис. При работещ екземпляр на MongoDB, задействайте mongo shell:
mongo
След като влезете в mongo
shell, избройте всички налични бази данни.
show databases;
Трябва да има навечерието
база данни. Превключете към навечерието
база данни.
use eve;
Изпълнете show
команда за изброяване на таблиците в eve
база данни.
show tables;
Изброените таблици трябва да имат таблица, наречена user
. Избройте записите от потребител
таблица с помощта на следната команда:
db.user.find()
Ето избраните записи от потребителските таблици:
Проверка на потребителския API
След това ще създадем API за валидиране на съществуващ потребител. Обикновено, ако направим get
заявка до крайната точка на потребителя (http://127.0.0.1:5000/user), тя ще даде подробности за всички регистрирани потребители от базата данни. Тук трябва да приложим две неща. Първо трябва да удостоверим потребител, използвайки собствено име и парола, и второ, трябва да върнем данните за потребителя от базата данни при успешно удостоверяване.
За да получим подробности въз основа на първото име, трябва да добавим допълнително поле за справка в DOMAIN
в settings.py
.
'additional_lookup': { 'url': 'regex("[\w]+")', 'field': 'username', }
Както се вижда в горния код, добавихме поле за търсене за потребителско име
. Сега, когато GET заявка се изпрати до http://127.0.0.1:5000/user/
<потребителско име>код> той ще върне данните за потребителя с конкретното
потребителско име
. Когато правим заявка до конкретен потребител, ние също ще изпратим потребителско име
и парола
за удостоверяване.
Ще направим основно удостоверяване, за да потвърдим конкретен потребител въз основа на потребителско име и парола. Първо, трябва да импортираме Basic Auth
клас от EVE. Създайте клас, наречен Удостоверяване
за да приложите удостоверяването, както е показано:
from eve.auth import BasicAuth class Authenticate(BasicAuth): def check_auth(self, username, password, allowed_roles, resource, method):
Сега, когато ресурсът е user
и методът на заявка е GET
, ние ще удостоверим потребителя. При успешно удостоверяване ще бъдат върнати потребителските данни на потребителя с първо име в крайната точка на API. Ние също така ще ограничим създаването на потребители, като предоставим потребителско име и парола. Така че, ако методът е POST и крайната точка на API е потребител, ние ще проверим и потвърдим потребителското име и паролата. И така, ето пълния Удостоверяване
клас:
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
Трябва да предадем Удостоверяване
име на класа, докато стартирате API. Така че променете началния код на API, както е показано:
if __name__ == '__main__': app = Eve(auth=Authenticate) app.run()
Запазете всички промени и изпълнете api.py
. Опитайте да изпратите основна заявка за удостоверяване с потребителско име и парола от Postman до http://127.0.0.1/user/username (заменете потребителското име с всяко друго съществуващо потребителско име). При успешно удостоверяване трябва да получите потребителските данни в отговор, както е показано:
Добавяне, изтриване и актуализиране на елементи
API за добавяне на елемент
За да създадем API за добавяне на елемент, всичко, което трябва да направим, е да създадем нова схема за елемент в settings.py
.
'item': { 'schema': { 'name':{ 'type': 'string' }, 'username': { 'type': 'string' } } }
API за добавяне на елемент ще помогне на всеки влязъл потребител да добави елемент. Ще запазим елемента заедно с потребителското име на потребителя, който е въвел елемента. Запазете промените и опитайте да направите POST заявка до http://127.0.0.1/item както е показано:
API за изтриване на елемент
За да изтрием елемент, създаден от потребител, всичко, което трябва да направим, е да извикаме крайната точка на елемента /item_id
. Но простото извикване на заявка DELETE няма да изтрие елемента. За да изтрием елемент, ние също трябва да предоставим _etag
свързани с определен артикул. Веднъж идентификатор на елемент
и _etag
съвпадение, елементът се изтрива от базата данни. Ето как се извиква методът DELETE в крайната точка на елемента.
API за актуализиране на артикули
API за актуализиране е подобен на API за изтриване. Всичко, което трябва да направим, е да изпратим PATCH заявка с item id
и _etag
и полетата на формуляра, които трябва да бъдат актуализирани. Ето как се актуализират подробностите за артикула: