====== 2. REST rozhraní ====== ===== Cíle cvičení ===== - procvičení programování v Pythonu - vytvoření jednoduchého rozhraní pomocí knihovny [[https://flask.palletsprojects.com/en/2.2.x/|Flask]] - otestování HTTP komunikace pomocí vhodného nástroje, např. [[https://addons.mozilla.org/en-US/firefox/addon/rested/|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 '

Hello, World!

'
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 '

Hello, World!

'. 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//') def capitalize(word): return '

{}

'.format(escape(word.capitalize()))
V URL může být i více proměnných: @app.route('/add///') def add(n1, n2): return '

{}

'.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 '

{}

'.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: * vložení hodnoty * zobrazení poslední vložené hodnoty * zobrazení posledních ''N'' vložených hodnot * smazání ''N'' prvních hodnot