Menu

Formio – knihovna pro snadnou tvorbu formulářů

Podílím se na projektech jako jsou např. O2 videotéka, portál or.justice.cz, webové prezentace pro O2, Siemens nebo Ticketpro. Právě z těchto projektů čerpám inspiraci při tvorbě knihovny Formio.

Jak by se dala jednoduše a stručně představit knihovna Formio?

Formio je knihovna pro definování a zpracování formulářů. Klade si za cíl co nejvíce usnadnit tvorbu formulářů pomocí snadno použitelného konfigurovatelného API, které pracuje s immutable definicí formuláře a minimalizuje prostor pro případné chyby.

Komu je tato lightweight knihovna převážně určena?

Programátorům, ale užitek z ní mají i koncoví uživatelé. Můžou profitovat z toho, že programátor použil knihovnu, která mu usnadnila práci a dovolila mu nasměrovat více energie třeba ke zlepšování uživatelské přívětivosti uživatelského rozhraní.

Používá se již Formio na nějakých projektech?

Prozatím ne. Používám ji na vlastních projektech. Zpětně bych ji na některých realizovaných projektech určitě použil. Je pravda, že teprve nedávno jsem dodělal web, zpřístupnil kód na Gitlabu a v Maven Central repozitáři a vytvořil dokumentaci. Teď věřím, že pokud se mi Formio podaří dostat k více lidem, používat se začne.

Kompletní informace na webu www.formio.net.

V čem vidíš nejzásadnější přínos Formio knihovny a proč bys ji doporučoval používat?

Je to hlavně:

  • Jednoduchost použití, nezávislost a snadná použitelnost v různých (nejen) webových frameworcích. Nebo s dalšími užitečnými knihovnami (např. https://twinstone.org).
  • Výkonný obousměrný data binding, který umožňuje automaticky napojovat data z objektů na formulářová pole a zpět z requestu (odeslaného formuláře) na editovaný objekt (s podporou immutable tříd, kolekcí a polí jednoduchých i komplexních typů, objektových i primitivních datových typů, libovolně vnořených objektů).
  • Immutable definice formuláře, kterou jde jednoduše naplnit daty (a získat naplněný formulář zobrazitelný v šabloně), poskytuje kompletní objektovou reprezentaci formuláře, se kterou jde snadno manipulovat jako s celkem.
  • Knihovna za vás automaticky zpracuje multipart request s uploadovanými soubory a data napojí na jednoduše zpracovatelné objekty.
  • Flexibilní validace pomocí bean validation API, jde definovat vlastní umístění souboru s překlady validačních hlášek (výchozí je bundle odpovídající editované třídě).
  • Nadefinované formuláře a jejich zpracování jsou snadno testovatelné.
  • Knihovna nabízí volitelnou ochranu proti CSRF útokům pomocí autorizačních tokenů.

Co Tě motivovalo k tomu, věnovat čas vytvoření poměrně rozsáhlé knihovny, kterou jsi navíc zpřístupnil jako open source?

Chybějící podpora velmi snadné tvorby formulářů v některých frameworcích. Snaha co nejvíce tvorbu formulářů zautomatizovat a vytvořit jednoduše použitelný nezávislý nástroj, který jde snadno kombinovat s jinými knihovnami/frameworky. Inspiroval mě hlavně vývoj v Play! frameworku ve Scale.

Co bylo při vývoji nejnáročnější?

Na náročnost jsem nehleděl, je potřeba se tím trochu bavit, trochu se hecovat a mít radost z toho, jak vám to roste pod rukama. Náročnější bylo jistě dodržet immutable strukturu formulářové definice a přitom ji vytvořit dostatečně flexibilní a obecnou tak, aby bylo možné zpracovávat editované objekty s libovolně vnořenými podobjekty a s libovolně zanořenými kolekcemi/poli objektů. Chtěl jsem, aby součástí knihovny byl nápomocný data binding, který umí pracovat jak s Java beanami, tak s immutable objekty, jak s objektovými, tak s primitivními typy, jak s kolekcemi, tak s poli. Uživatel-programátor by neměl být do ničeho zbytečně nucen. Při vývoji jsem se řídil pravidlem “work hard to keep it simple”. Formio jsem vyvíjel v průběhu cca 6 měsíců, tak různě po večerech nebo o víkendech.

Při vývoji jsem se řídil pravidlem work hard to keep it simple.

Jak vnímáš obecně open source?

Jako příležitost podílet se spolu s podobně naladěnými lidmi na tvorbě a zkvalitňování užitečných nástrojů, ze kterých pak mohou všichni společně čerpat výhody. Jako příležitost k vyvinutí něčeho více oponovaného než je čistě uzavřený systém.

Zmínil jsi, že Ti byl inspirací Play! framework? V čem má tedy Formio navrch?

Formio je hlavně nezávislou knihovnou, která může být použita jak v Play! frameworku, tak i v jiných frameworcích. Formio i v Javě umožňuje napojovat data z formuláře na immutable objekty. Uploadované soubory vám jednoduše vrátí napojené na objekty podobně jako ostatní typy vstupů (stírá rozdíly mezi multipart a “singlepart” requesty). Jedná se o konfigurovatelnou knihovnu a její části jde případně používat i samostatně. Formio se dále bude rozšiřovat o různé validátory a další možnosti sanitizace, kontroly a zpracování vstupů.

Teď věřím, že pokud se mi Formio podaří dostat k více lidem, používat se začne.

Zvažuješ Formio převést také na jinou platformu než Java? Například do PHP?

Ne. Dokud na jinou platformu sám nepřejdu. Proto jsem také vydal knihovnu jako open-source, aby mohla být svobodně forkována a upravována lidmi, kteří shledají její použití užitečné třeba i v PHP. Myslím, že má smysl, aby se každý člověk efektivně věnoval tomu, co mu je nejbližší.

Umožňuje Formio ajaxové nahrávání souborů?

Formio za vás provede zpracování multipart requestů (HttpServletRequestů), které je v prosté Javě pro typické use casy zbytečně složité. Sjednocuje práci s různými vstupy, takže nemusíte mít zbytečné “obavy”, že namísto jednoduchého textového vstupu potřebujete zpracovat upload souborů. Umožní konfigurovat a validovat max. velikost uploadovaného souboru nebo celého requestu. AJAX knihovna neřeší, ten je obvykle řešen obecnějším frameworkem, do kterého je zasazena. Knihovnu je také možné dobře zkombinovat s ajaxovým toolem jako je např. Twinstone TDI.

K vyzkoušení je připraveno demo.

Jaká je zde využívaná CAPTCHA?

Formio captchu neimplementuje. Ke knihovně si ale můžete připojit captchu podle vlastní chuti. Třeba reCAPTCHU, která je přístupná i lidem s některými handicapy. Z hlediska snadné přístupnosti a zachování jednoduchosti formulářů je ale ideální captchu nepoužívat vůbec. Formio poskytuje ochranu proti CSRF pomocí autorizačních tokenů, která může spolu s dalšími technikami, jako je např. skrytá “Honeypot Captcha”, klasickou obtěžující captchu nahradit. Součástí knihovny by se měl v budoucnu stát spíše nějaký spambot filtr než klasická captcha.

Lze používat vlastní CSS třídy (ať už globálně nebo jen lokálně)?

Formio je neinvazivní server-side knihovna, lze ji používat s různými šablonovacími systémy, nebo i v komponentových (nejen) webových frameworcích. Takže CSS třídy jistě můžete použít jaké chcete :-)

Bonusová: Jak jsi přišel na název Formio? Podobně jako David Grudl?

S Davidem mám jistě společné to, že se mi ve vaně taky dobře… přemýšlí a leccos mě tam napadne. Ale Formio jsem ve vaně nenašel. Formio je jednoduše spojením slov Form IO. Zpracovává formulářové vstupy a poskytuje formulářové výstupy.

Formio na: