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 (https://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 https://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 (https://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 https://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 https://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 https://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: