Kódím.cz
13

Vytvoření API

Postavíme vlastní webové API pomocí frameworku FastAPI a naučíme se, jak ho volat z Pythonu.

Úvod do FastAPI

Zatím jsme z Pythonu data jen stahovali - posílali jsme GET requesty na cizí servery a zpracovávali jejich odpovědi. Dnes si zkusíme roli obrátit: vytvoříme vlastní server, který bude na requesty odpovídat. Takovému serveru se říká API (Application Programming Interface) a my ho postavíme pomocí frameworku FastAPI.

FastAPI je moderní Python framework určený přesně k tomuto účelu. Nainstalujeme ho spolu s balíčkem uvicorn, který slouží jako webový server, jenž naši aplikaci spustí:

pip install fastapi uvicorn

Na Windows použijeme pip, na macOS a Linuxu pip3.

Minimální aplikace

Představ si, že chceš vytvořit jednoduchou službu, která na dotaz odpoví pozdravem. Vytvoř soubor main.py s tímto obsahem:

from fastapi import FastAPI

app = FastAPI()

@app.get("/")
def root():
    return {"zprava": "Server funguje!"}

Aplikaci spustíme příkazem v terminálu:

uvicorn main:app --reload

Přepínač --reload zajistí, že se server automaticky restartuje pokaždé, když uložíš změnu v kódu - praktické při vývoji.

Po spuštění uvidíš v terminálu výstup podobný tomuto:

INFO:     Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
INFO:     Started reloader process
INFO:     Started server process
INFO:     Waiting for application startup.
INFO:     Application startup complete.

POZOR! Terminál, ve kterém běží uvicorn, je blokovaný - server v něm běží a čeká na requesty. Abys mohl psát další příkazy, potřebuješ otevřít druhý terminál. Ve VS Code to uděláš kliknutím na ikonku + v panelu terminálu (nebo zkratkou `Ctrl+Shift+``). Oba terminály pak běží vedle sebe.

Otevření v prohlížeči

Přejdi v prohlížeči na adresu http://127.0.0.1:8000. Uvidíš odpověď serveru ve formátu JSON:

{"zprava": "Server funguje!"}

FastAPI automaticky vygeneruje i interaktivní dokumentaci. Přejdi na adresu http://127.0.0.1:8000/docs a uvidíš přehled všech endpointů, které tvoje API nabízí. Každý si tam můžeš rovnou vyzkoušet kliknutím na tlačítko "Try it out".

Ověření pomocí knihovny requests

Jak jsme viděli u stahování dat z cizích API, na posílání HTTP requestů v Pythonu slouží knihovna requests. Stejně ji použijeme i na testování našeho vlastního serveru.

Ve druhém terminálu (server stále běží v tom prvním) spusť Python nebo vytvoř soubor test.py:

import requests

response = requests.get("http://127.0.0.1:8000")
print(response.status_code)
print(response.json())
200
{'zprava': 'Server funguje!'}

Stavový kód 200 znamená, že request proběhl úspěšně. Metoda .json() převede tělo odpovědi ze JSON řetězce na Python slovník - přesně jako při stahování dat z cizích API.

Poznámka: Adresa 127.0.0.1 je speciální adresa, která vždy odkazuje na tvůj vlastní počítač. Říká se jí také localhost. Server tedy běží lokálně a je dostupný jen z tvého počítače, ne z internetu.