Table of Contents

2. REST rozhraní

Cíle cvičení

  1. procvičení programování v Pythonu
  2. vytvoření jednoduchého rozhraní pomocí knihovny Flask
  3. otestování HTTP komunikace pomocí vhodného nástroje, např. RESTED

Jednoduchá webová aplikace

Vytvořte zdrojový kód v Pythonu a nazvěte ho např. app.py.

from flask import Flask
 
app = Flask(__name__)
 
 
@app.route('/')
def hello():
    return '<h1>Hello, World!</h1>'

Ve výše uvedeném bloku kódu nejprve importujete objekt Flask z balíčku flask. Poté pomocí něj vytvoříte instanci aplikace Flask a dáte jí jméno app. Předáte speciální proměnnou name, která obsahuje název aktuálního modulu Pythonu. Toto jméno říká instanci, kde se nachází; potřebujete ho, protože Flask v zákulisí nastavuje některé cesty.

Jakmile vytvoříte instanci aplikace, můžete ji použít ke zpracování příchozích webových požadavků a odesílání odpovědí uživateli. @app.route je dekorátor, který změní běžnou funkci jazyka Python na funkci Flask view, která převede návratovou hodnotu funkce na odpověď HTTP, kterou zobrazí klient HTTP, například webový prohlížeč. Funkci @app.route() předáte hodnotu '/', která znamená, že tato funkce bude odpovídat na webové požadavky na adresu URL /, což je hlavní adresa URL.

Funkce zobrazení hello() vrátí jako odpověď HTTP řetězec '<h1>Hello, World!</h1>'.

Nyní máte jednoduchou aplikaci Flask v souboru Python s názvem app.py, v dalším kroku aplikaci spustíte a uvidíte výsledek funkce zobrazení hello() vykreslený ve webovém prohlížeči.

Spuštění aplikace

Aplikaci napsanou pomocí frameworku Flask lze spustit dvěme způsoby.

Spuštění v prostředí Flask

Nejprve v adresáři flask_app s aktivovaným virtuálním prostředím sdělte Flasku, kde má najít aplikaci (ve vašem případě app.py), pomocí proměnné prostředí FLASK_APP následujícím příkazem (v systému Windows použijte set místo export):

export FLASK_APP=app

Poté pomocí proměnné prostředí FLASK_ENV určete, že chcete aplikaci spustit ve vývojovém režimu (abyste mohli pomocí ladicího programu zachytit chyby):

export FLASK_ENV=development

Nakonec aplikaci spusťte pomocí příkazu flask run:

flask run

Spuštění v editoru

Někdy je výhodné spustit aplikaci bez prostředí Flask, např. přímo v editoru. Pak je třeba vytvořit plnohodnotnou aplikaci, která bude obsahovat hlavní metodu, ve které se vyvořená aplikace spustí.

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000, debug=True)

Specifikace HTTP metody

Dalším parametrem metody route() je možné specifikovat HTTP metodu použitou při dotazu

@app.route('/', methods=["GET"])

Zkuste rozšířit aplikační rozhraní.

Dynamické směrování

Rozšiřte aplikaci o následující kód

from markupsafe import escape
 
# ...
 
 
@app.route('/capitalize/<word>/')
def capitalize(word):
    return '<h1>{}</h1>'.format(escape(word.capitalize()))

V URL může být i více proměnných:

@app.route('/add/<int:n1>/<int:n2>/')
def add(n1, n2):
    return '<h1>{}</h1>'.format(n1 + n2)

REST rozhraní

from flask import Flask, request, jsonify
 
app = Flask(__name__)
 
countries = [
    {"id": 1, "name": "Thailand", "capital": "Bangkok", "area": 513120},
    {"id": 2, "name": "Australia", "capital": "Canberra", "area": 7617930},
    {"id": 3, "name": "Egypt", "capital": "Cairo", "area": 1010408},
]
 
@app.route("/countries", methods=['GET'])
def get_countries():
    return jsonify(countries)
 
@app.route("/countries", methods=['POST'])
def add_country():
    if request.is_json:
        name = request.json.get('name') # kompletni JSON: request.get_json()
    else:
        name = request.form.get('name')
    return '<h1>{}</h1>'.format(name)

Zadání 1. miniprojektu

Připravte ve frameworku Flask aplikaci, která bude sloužit pro ukládání dat z jednoduchého teploměru. Rozhraní umožňuje následující operace: