MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Tworzenie interfejsów API REST za pomocą EVE

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/ zwróci dane użytkownika z konkretną 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:


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Błąd połączenia Mongodb w kontenerze Docker

  2. Jak sprawdzić, czy indeks jest używany?

  3. Najlepsza praktyka w utrzymywaniu sesji MGO

  4. Jak ustawić mongod.conf bind_ip z wieloma adresami ip?

  5. za dużo otwartych plików na serwerze mgo go