sql >> Databáze >  >> NoSQL >> MongoDB

Vytváření REST API pomocí EVE

Python je jedním z nejsnáze čitelných a snadno zapisovatelných programovacích jazyků všech dob. V průběhu let se popularita Pythonu pouze zvýšila a je široce používán při vývoji webových aplikací, skriptování, vytváření her, vědeckých počítačích atd.

Flask je platforma webových aplikací Python, která si získává na popularitě díky snadnému použití pro začátečníky v jazyce Python. V tomto tutoriálu se podíváme na EVE, framework pro vytváření REST API založený na Flask, MongoDB a Redis. Z oficiálních dokumentů:

Využívá Flask, MongoDB, Redis a dobré úmysly Eve umožňuje bez námahy vytvářet a nasazovat vysoce přizpůsobitelné, plně funkční webové služby RESTful.

Co budeme tvořit

V tomto tutoriálu se podíváme, jak vytvořit rozhraní REST API pomocí rámce EVE. Dále pomocí AngularJS navrhneme frontend pro jednoduchou aplikaci a zfunkčníme ji využitím REST API vytvořených pomocí EVE. V tomto tutoriálu implementujeme následující funkce:

  • Vytvořit uživatelské rozhraní API
  • Ověřit uživatelské rozhraní API
  • Add Items API
  • Odstranit Items API
  • Update Items API

Začínáme

Instalace

K instalaci EVE použijeme pip.

pip install eve

Budeme používat MongoDB jako databáze. Podívejte se na oficiální dokumentaci k instalaci podle vašeho systému.

Vytvoření základního rozhraní API

Vytvořte složku projektu s názvem PythonAPI . Přejděte do PythonAPI a vytvořte soubor s názvem api.py . Uvnitř api.py importovat EVE a vytvořte objekt EVE.

from eve import Eve
app = Eve()

Dále spusťte app když je program spuštěn jako hlavní program.

from eve import Eve
app = Eve()

if __name__ == '__main__':
    app.run()

Spusťte MongoDB pomocí následujícího příkazu:

mongod --dbpath= <PATH-TO> /data/db/

Jak vidíte, musíme zadat cestu k souborům db. Jednoduše vytvořte data/db ve vašem systému souborů a spusťte výše uvedený příkaz.

Spolu s instancí MongoDB EVE vyžaduje konfigurační soubor s informacemi o zdrojích API. Tedy v PythonAPI vytvořte další soubor s názvem settings.py a přidejte následující kód:

DOMAIN = {'user': {}}

Výše uvedený kód informuje EVE, že zdroj pro user je k dispozici.

Uložte všechny soubory a spusťte api.py :

python api.py

Rozhraní API by mělo být online, jak je znázorněno:

K odesílání požadavků do rozhraní API budeme používat klienta Postman REST. Je zdarma a lze jej nainstalovat jednoduchým kliknutím. Po dokončení instalace spusťte aplikaci a zadejte adresu URL API (http://127.0.0.1:5000/) a klikněte na odeslat. Měli byste mít odpověď jako na obrázku:

Protože jsme nezavolali žádný konkrétní prostředek API, zobrazí se všechny dostupné prostředky. Nyní zkuste zavolat user zdroj a měli byste mít odpověď specifickou pro user .

Vytvoření a ověření uživatelského rozhraní API

Vytvořit uživatelské rozhraní API

Začneme vytvořením API pro vytvoření nebo registraci uživatele pro naši aplikaci. Uživatel bude mít určitá pole jako First Name , Last Name , Username , Password a Phone Number .

Nejprve tedy budeme muset definovat schéma pro uživatele. Schéma definuje pole a datové typy klíčových polí. Otevřete settings.py a upravte DOMAIN definováním schématu, jak je znázorněno:

DOMAIN = {
    'user': {
        'schema': {
            'firstname': {
                'type': 'string'
            },
            'lastname': {
                'type': 'string'
            },
            'username': {
                'type': 'string',
                 'unique': True
            },
            'password': {
                'type': 'string'
            },
            'phone': {
                'type': 'string'
            }
        }
    }
}

Jak můžete vidět ve výše uvedeném kódu, definovali jsme klíčová pole potřebná k vytvoření uživatele a jeho datový typ definovaný ve schématu. Uložte změny a spusťte api.py . Z klienta Postman zkuste provést požadavek POST spolu s požadovanými parametry na http://127.0.0.1/user, jak je uvedeno:

Při požadavku POST na uživatele to vyhodilo 405 Method Not Allowed chyba. Ve výchozím nastavení EVE přijímá pouze požadavky GET. Pokud chceme použít jinou metodu, musíme ji explicitně definovat. Otevřete settings.py a definujte metody zdrojů, jak je uvedeno:

RESOURCE_METHODS = ['GET', 'POST']

Uložte změny a spusťte api.py . Nyní zkuste znovu POST uživateli a měli byste mít odpověď níže:

Jak můžete vidět, výše uvedený požadavek POST byl úspěšný. V našem settings.py jsme nedefinovali konfigurace databáze , takže EVE dokončila požadavek pomocí spuštěné instance MongoDB . Pojďme se přihlásit do MongoDB shell a podívejte se na nově vytvořený záznam. Se spuštěnou instancí MongoDB spusťte mongo shell:

mongo

Jakmile jste uvnitř mongo shell, seznam všech dostupných databází.

show databases;

Musí existovat eve databáze. Přepněte na eve databáze.

use eve;

Spusťte show příkaz k výpisu tabulek uvnitř eve databáze.

show tables;

Uvedené tabulky musí mít tabulku nazvanou user . Seznam záznamů od user tabulky pomocí následujícího příkazu:

db.user.find()

Zde jsou vybrané záznamy z uživatelských tabulek:

Ověřit uživatelské rozhraní API

Dále vytvoříme API pro ověření stávajícího uživatele. Normálně, když uděláme get požadavek na koncový bod uživatele (http://127.0.0.1:5000/user), poskytne podrobnosti o všech registrovaných uživatelích z databáze. Zde musíme implementovat dvě věci. Nejprve musíme uživatele ověřit pomocí křestního jména a hesla a zadruhé musíme po úspěšném ověření vrátit údaje o uživateli z databáze.

Abychom získali podrobnosti na základě křestního jména, musíme přidat další vyhledávací pole do DOMAIN v settings.py .

'additional_lookup': {
            'url': 'regex("[\w]+")',
            'field': 'username',
            }

Jak je vidět ve výše uvedeném kódu, přidali jsme vyhledávací pole pro username . Nyní, když je požadavek GET odeslán na http://127.0.0.1:5000/user/ <username> vrátí podrobnosti o uživateli s konkrétním username . Při požadavku konkrétnímu uživateli zašleme také username a password pro ověření.

Provedeme základní ověření, abychom ověřili konkrétního uživatele na základě uživatelského jména a hesla. Nejprve musíme importovat Basic Auth třídy od EVE. Vytvořte třídu s názvem Authenticate implementovat ověřování, jak je uvedeno:

from eve.auth import BasicAuth

class Authenticate(BasicAuth):
    def check_auth(self, username, password, allowed_roles, resource,
                   method):
                   

Nyní, když je zdrojem user a metoda požadavku je GET , ověříme uživatele. Po úspěšné autentizaci budou vráceny uživatelské údaje uživatele s křestním jménem v koncovém bodu API. Rovněž omezíme vytváření uživatelů poskytnutím uživatelského jména a hesla. Pokud je tedy metoda POST a koncový bod API je uživatel, zkontrolujeme a ověříme uživatelské jméno a heslo. Zde je kompletní Authenticate třída:

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

Musíme předat Authenticate název třídy při spouštění API. Upravte tedy iniciační kód API, jak je znázorněno:

if __name__ == '__main__':
    app = Eve(auth=Authenticate)
    app.run()

Uložte všechny změny a spusťte api.py . Zkuste odeslat základní požadavek na ověření s uživatelským jménem a heslem od Postman na http://127.0.0.1/user/username (uživatelské jméno nahraďte jakýmkoli jiným existujícím uživatelským jménem). Po úspěšné autentizaci byste měli v odpovědi obdržet podrobnosti o uživateli, jak je uvedeno:

Přidat, odstranit a aktualizovat položky

Add Item API

Abychom mohli vytvořit rozhraní API pro přidání položky, stačí vytvořit nové schéma pro položku v settings.py .

'item': {
        'schema': {
            'name':{
                'type': 'string'
                },
            'username': {
                'type': 'string'
                }
            }
        }

Add Item API by pomohlo každému přihlášenému uživateli přidat položku. Položku uložíme spolu s uživatelským jménem uživatele, který položku zadal. Uložte změny a zkuste provést požadavek POST na adresu http://127.0.0.1/item, jak je uvedeno:

Smazat Item API

Pro smazání položky vytvořené uživatelem stačí zavolat koncový bod položky /item_id . Pouhým voláním požadavku DELETE se však položka nesmaže. Abychom mohli smazat položku, musíme také poskytnout _etag související s konkrétní položkou. Jednou item id a _etag shoda, položka je smazána z databáze. Zde je návod, jak se v koncovém bodu položky volá metoda DELETE.

Aktualizovat rozhraní API položky

Update API je podobné jako Delete API. Jediné, co musíme udělat, je odeslat požadavek PATCH s item id a _etag a pole formuláře, která je třeba aktualizovat. Podrobnosti o položce se aktualizují takto:


  1. Jak otestovat metodu, která se připojuje k mongo, aniž by se skutečně připojovala k mongo?

  2. Je možné získat pole v pořadí projekce v Agregation Frameworks mongo

  3. Použití findOne ve smyčce trvá v Node.js příliš dlouho

  4. Začínáme s operační databází Cloudera Data Platform (COD)