Python jest jednym z najłatwiejszych do czytania i pisania języków programowania wszech czasów. Z biegiem lat popularność Pythona tylko wzrosła i jest on szeroko stosowany w tworzeniu aplikacji internetowych, pisaniu skryptów, tworzeniu gier, obliczeniach naukowych itp.
Flask to framework aplikacji internetowych w Pythonie, który zyskuje na popularności ze względu na łatwość obsługi dla początkujących w Pythonie. W tym samouczku przyjrzymy się EVE, frameworkowi do budowania API REST opartemu na Flask, MongoDB i Redis. Z oficjalnych dokumentów:
Zasilany przez Flask, MongoDB, Redis i dobre intencje Eve pozwala bez wysiłku budować i wdrażać wysoce konfigurowalny, w pełni funkcjonalny serwis internetowy RESTful.
Co będziemy tworzyć
W tym samouczku zobaczymy, jak tworzyć interfejsy API REST przy użyciu platformy EVE. Następnie, korzystając z AngularJS, zaprojektujemy interfejs dla prostej aplikacji i sprawimy, że będzie funkcjonalna, korzystając z interfejsów API REST zbudowanych przy użyciu EVE. W tym samouczku zaimplementujemy następującą funkcjonalność:
- Utwórz interfejs API użytkownika
- Weryfikuj interfejs API użytkownika
- Add Items API
- Usuń interfejs API elementów
- Aktualizuj interfejs API przedmiotów
Pierwsze kroki
Instalacja
Do zainstalowania EVE użyjemy pipa.
pip install eve
Będziemy używać MongoDB
jako baza danych. Zapoznaj się z oficjalnymi dokumentami dotyczącymi instalacji zgodnie z Twoim systemem.
Tworzenie podstawowego API
Utwórz folder projektu o nazwie PythonAPI
. Przejdź do PythonAPI
i utwórz plik o nazwie api.py
. Wewnątrz api.py
importuj EVE
i utwórz obiekt EVE.
from eve import Eve app = Eve()
Następnie uruchom aplikację
gdy program jest wykonywany jako program główny.
from eve import Eve app = Eve() if __name__ == '__main__': app.run()
Uruchom swoją MongoDB
za pomocą następującego polecenia:
mongod --dbpath= <PATH-TO> /data/db/
Jak widać, musimy określić ścieżkę do plików db. Po prostu utwórz data/db
w swoim systemie plików i uruchom powyższe polecenie.
Wraz z instancją MongoDB
uruchomiony, EVE wymaga pliku konfiguracyjnego z informacjami o zasobach API. Tak więc w PythonAPI
folder utwórz kolejny plik o nazwie settings.py
i dodaj następujący kod:
DOMAIN = {'user': {}}
Powyższy kod informuje EVE, że zasób dla użytkownika
jest dostępny.
Zapisz wszystkie pliki i uruchom api.py
:
python api.py
Interfejs API powinien być online, jak pokazano:
Będziemy używać klienta Postman REST do wysyłania żądań do interfejsów API. Jest bezpłatny i można go zainstalować jednym kliknięciem. Po zakończeniu instalacji uruchom aplikację i wprowadź adres URL API (http://127.0.0.1:5000/) i kliknij wyślij. Powinieneś otrzymać odpowiedź, jak pokazano:
Ponieważ nie wywołaliśmy żadnego konkretnego zasobu API, wyświetli on wszystkie dostępne zasoby. Teraz spróbuj zadzwonić do użytkownika
zasób i powinieneś mieć odpowiedź specyficzną dla użytkownika
.
Utwórz i zatwierdź interfejs API użytkownika
Utwórz interfejs API użytkownika
Zaczniemy od zbudowania interfejsu API, aby utworzyć lub zarejestrować użytkownika dla naszej aplikacji. Użytkownik miałby określone pola, takie jak Imię
, Nazwisko
, Nazwa użytkownika
, Hasło
i Numer telefonu
.
Więc najpierw musimy zdefiniować schemat dla użytkownika. Schemat definiuje pola i typy danych pól kluczowych. Otwórz settings.py
i zmodyfikuj DOMENĘ
poprzez zdefiniowanie schematu, jak pokazano :
DOMAIN = { 'user': { 'schema': { 'firstname': { 'type': 'string' }, 'lastname': { 'type': 'string' }, 'username': { 'type': 'string', 'unique': True }, 'password': { 'type': 'string' }, 'phone': { 'type': 'string' } } } }
Jak widać w powyższym kodzie, zdefiniowaliśmy kluczowe pola, które są potrzebne do stworzenia użytkownika oraz jego typ danych zdefiniowany w schemacie. Zapisz zmiany i wykonaj api.py
. W programie Postman Client spróbuj wykonać żądanie POST wraz z wymaganymi parametrami na adres http://127.0.0.1/user, jak pokazano:
Na żądanie POST do użytkownika wyrzucił 405 metodę niedozwoloną
błąd. Domyślnie EVE akceptuje tylko żądania GET. Jeśli chcemy użyć jakiejkolwiek innej metody, musimy ją wyraźnie zdefiniować. Otwórz settings.py
i zdefiniuj metody zasobów, jak pokazano :
RESOURCE_METHODS = ['GET', 'POST']
Zapisz zmiany i wykonaj api.py
. Teraz spróbuj ponownie POST
do użytkownika i powinieneś otrzymać następującą odpowiedź:
Jak widać, powyższe żądanie POST zakończyło się powodzeniem. Nie zdefiniowaliśmy konfiguracji bazy danych w naszym settings.py
, więc EVE wykonała żądanie, używając uruchomionej instancji MongoDB
. Zalogujmy się do MongoDB
powłoki i zobacz nowo utworzony rekord. Przy uruchomionej instancji MongoDB uruchom powłokę Mongo:
mongo
Wewnątrz mongo
powłoki, wypisz wszystkie dostępne bazy danych.
show databases;
Musi być ewa
Baza danych. Przełącz się na eve
baza danych.
use eve;
Wykonaj pokaz
polecenie, aby wyświetlić tabele wewnątrz eve
baza danych.
show tables;
Wymienione tabele muszą mieć tabelę o nazwie użytkownik
. Wyświetl listę rekordów od użytkownika
tabeli za pomocą następującego polecenia:
db.user.find()
Oto wybrane rekordy z tabel użytkowników:
Weryfikuj interfejs API użytkownika
Następnie utworzymy interfejs API do weryfikacji istniejącego użytkownika. Zwykle, jeśli wykonamy pobierz
żądanie do punktu końcowego użytkownika (http://127.0.0.1:5000/user), poda szczegóły wszystkich zarejestrowanych użytkowników z bazy danych. Musimy wprowadzić tutaj dwie rzeczy. Najpierw musimy uwierzytelnić użytkownika przy użyciu imienia i hasła, a po drugie musimy zwrócić dane użytkownika z bazy danych po pomyślnym uwierzytelnieniu.
Aby uzyskać szczegółowe informacje na podstawie imienia, musimy dodać dodatkowe pole wyszukiwania w DOMAIN
w settings.py
.
'additional_lookup': { 'url': 'regex("[\w]+")', 'field': 'username', }
Jak widać w powyższym kodzie, dodaliśmy pole wyszukiwania dla nazwa użytkownika
. Teraz, gdy żądanie GET zostanie wysłane do http://127.0.0.1:5000/user/
nazwą użytkownika
. Wysyłając prośbę do konkretnego użytkownika, wyślemy również nazwę użytkownika
i hasło
do uwierzytelniania.
Będziemy przeprowadzać podstawowe uwierzytelnianie, aby zweryfikować konkretnego użytkownika na podstawie nazwy użytkownika i hasła. Najpierw musimy zaimportować Basic Auth
klasa od EVE. Utwórz klasę o nazwie Uwierzytelnij
aby zaimplementować uwierzytelnianie, jak pokazano:
from eve.auth import BasicAuth class Authenticate(BasicAuth): def check_auth(self, username, password, allowed_roles, resource, method):
Teraz, gdy zasób to użytkownik
a metoda żądania to GET
, uwierzytelnimy użytkownika. Po pomyślnym uwierzytelnieniu zostaną zwrócone dane użytkownika o imieniu w punkcie końcowym API. Ograniczymy również tworzenie użytkowników, podając nazwę użytkownika i hasło. Tak więc, jeśli metodą jest POST, a punktem końcowym API jest użytkownik, sprawdzimy i zweryfikujemy nazwę użytkownika i hasło. Oto pełne Uwierzytelnianie
klasa:
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
Musimy przekazać Uwierzytelnij
nazwa klasy podczas inicjowania API. Zmodyfikuj więc kod inicjujący API, jak pokazano:
if __name__ == '__main__': app = Eve(auth=Authenticate) app.run()
Zapisz wszystkie zmiany i wykonaj api.py
. Spróbuj wysłać podstawowe żądanie uwierzytelnienia z nazwą użytkownika i hasłem od Postmana na adres http://127.0.0.1/user/username (zastąp nazwę użytkownika dowolną inną istniejącą nazwą użytkownika). Po pomyślnym uwierzytelnieniu powinieneś otrzymać w odpowiedzi dane użytkownika, jak pokazano:
Dodaj, usuń i zaktualizuj elementy
Dodaj interfejs API przedmiotów
Aby stworzyć API Add item, wystarczy, że stworzymy nowy schemat dla elementu w settings.py
.
'item': { 'schema': { 'name':{ 'type': 'string' }, 'username': { 'type': 'string' } } }
Interfejs Add Item API pomoże każdemu zalogowanemu użytkownikowi dodać element. Będziemy zapisywać przedmiot wraz z nazwą użytkownika, który go wprowadził. Zapisz zmiany i spróbuj wykonać żądanie POST do http://127.0.0.1/item, jak pokazano:
Usuń interfejs API elementu
Aby usunąć element utworzony przez użytkownika, wystarczy wywołać punkt końcowy elementu /item_id
. Ale samo wywołanie żądania DELETE nie spowoduje usunięcia elementu. Aby usunąć element, musimy również podać _etag
związane z konkretną pozycją. Raz id produktu
i _etag
dopasowanie, pozycja zostanie usunięta z bazy danych. Oto jak wywoływana jest metoda DELETE w punkcie końcowym elementu.
Aktualizuj interfejs API elementów
Interfejs API aktualizacji jest podobny do interfejsu API usuwania. Wszystko, co musimy zrobić, to wysłać żądanie PATCH z identyfikatorem pozycji
i _etag
oraz pola formularza, które należy zaktualizować. Oto jak aktualizowane są szczegóły przedmiotu: