Hadi pijí z láhve

27. 2. 2013 20:03 Petr Blahoš

Nedávno jsem dostal za úkol popsat rozhraní pro komunikaci s naším systémem pro dodavatele jistého zařízení. Řekl jsem si, že nejlepší bude udělat i prototyp, aby si to mohli rovnou vyzkoušet. Jak na to? Naštěstí jsem před pár měsíci seznámil s webovým frameworkem Bottle.py. On sice neoslní výčtem schopností, ale má obrovskou výhodu: Je v jednom souboru. Takže můj prototyp bude:

  1. Soubor bottle.py
  2. Můj prototyp, třeba proto.py
  3. index.html
  4. A možná nějaké obrázky
index.html bude na začátku napsáno: Jestli spustíte proto.py na příkazové řádce, a pak nasměrujete Váš browser na http://localhost:8080/, uvidíte tento text s fungujícími příklady API.

Vlastní bottle.py je v základu jednoduchá. Má router ovládaný dekorátory, má templating engine (který se dá nahradit jiným templating enginem, ale pak ztratíme tu výhodu jednoho souboru). Má nějaké pluginy, ale zase jimi přijdeme o výhodu jednoho souboru. Tak začneme. Vlastní routing je jednoduchý:

@bottle.get("/")
def get_index():
    # ...
@bottle.post("/save")
def save_form():
    value = bottle.request.forms["key"] # post data
@bottle.route("/api/exec", method=["POST", "GET"])
def do_exec():
    # whatever
Kromě routingu už tady vidíte globální proměnnou bottle.request. Z ní můžeme přistupovat k parametrům requestu, a taky k datům z metody POST. Není to unifikované, jako ve WebOb (Pyramid, appenginu, a dalších), k datům z GETu přistoupíte pomocí bottle.request.params, k datům z POSTu přes bottle.request.forms. A ještě jedna pomůcka: Když váš handler vrátí dict, bottle.py jej převede na json a vrátí Content-type: application/json. A to už nám na prototyp API skoro stačí.

Chce to ukázku? Stačí takhle primitivní?

Sdílet