programování Clojure: frameworky a další nástroje
ačkoli všechny tyto libs mají za cíl zjednodušit programovací úlohy Clojure, mohou zaměnit začátečníka. Někdy je obtížné pochopit, jak je všechny spojit a najít optimální řešení pro konkrétní úkol. Takže teď vám chci ukázat své oblíbené nástroje pro programování v Clojure.
- práce s webovým serverem a koncovými body
- interakce s webovým serverem a databází
- směrování na server
- pomocí GraphQL v Clojure programování
- podpora modulární architektura
Pojďme začít cestu k Clojure programování světě!
Poznámka: Při přechodu z Javy a dalších podobných jazyků byste měli vědět, že v Clojure nejsou žádné tradiční rámce. Vše je založeno na libs a jejich sbírkách. Díky tomu je jazyk flexibilnější a víceúčelový.
Clojure ekosystém zahrnuje libs různé složitosti. Některé z nich jsou pouze sadou dalších funkcí (například Knihovna pro práci s časem). Mezitím systém libs poskytuje platformu pro vytvoření celého rámce. Takové knihovny umožňují programátorovi prezentovat aplikaci jako sadu komponent, popsat spojení mezi nimi atd. Samotná knihovna zajišťuje vytváření grafů závislostí. Například může převádět komponenty na srozumitelnější věci, jako jsou funkce.
účel: pohodlná práce s webovým serverem a koncovými body
kód: https://github.com/ring-clojure/ring
abstrakce HTTP serveru je klíčovým prvkem webového zásobníku Clojure. Umožňuje jednoduchou práci s webovým serverem a koncovými body, což je nezbytné pro úspěšný vývoj aplikací. Vytvořeno analogicky s WSGI (Python) a Rack (Ruby), Ring abstrahuje informace HTTP do jasného, sjednoceného API. Jako výsledek, web developer může stavět modulární systémy se skládala ze složky a sdílet tyto komponenty mezi různými servery a aplikací.
- jak funguje Ring?
- důvody pro použití Ring
- Http-kit
- jak Http-kit funguje?
- Důvody pro použití Http-kit
- Compojure a Bidi
- jak fungují Compojure a Bidi?
- jaký je mezi nimi rozdíl?
- Lacinia
- jak přípravek Lacinia působí?
- Důvody pro použití Lacinia
- HoneySQL a HugSQL
- jak fungují HoneySQL a HugSQL?
- jaký je mezi nimi rozdíl?
- HugSQL pros
- HugSQL cons
- HoneySQL pros
- HoneySQL nevýhody
- danielsz / system
- jak danielsz/system funguje?
- Důvody pro použití danielsz/systém
jak funguje Ring?
získává požadavky HTTP a vrací odpovědi HTTP. Ring tedy není takzvaný webový aplikační rámec.
důvody pro použití Ring
jako dominantní webové knihovny v programování Clojure je Ring příjemnou volbou pro začátečníky. Za prvé, jeho hlavní funkcí je poskytnout pohodlné rozhraní pro širokou škálu webových serverů. Z tohoto hlediska je technologie velmi užitečná a funguje perfektně.
další funkcí vyzvánění je poskytování sady modulů (“middleware”). Umožňuje vám tedy používat různé předem napsané knihovny, které jsou vzájemně kompatibilní.
většina programátorů Clojure volí kroužek pro koncové body kvůli své schopnosti používat middlewares. Tyto moduly například umožňují transformaci požadovaných parametrů z adresy URL na mapu kódu Clojure. Webový vývojář může snadno psát nový middleware a integrovat jej do ekosystému. Například pomocí knihovny cemerick / friend můžete plně spravovat proces autorizace, aplikovat různé strategie(počínaje přihlašovacím jménem a heslem, končící oAuth) atd. Ring middleware pomáhá pohodlně popsat a spustit proces. Uzavře všechny koncové body, které jsou zakázány neoprávněným uživatelům.
zkušenosti s používáním kroužku jsou důležité pro práci s jinými technologiemi Clojure. Je to první věc, kterou můžete použít k přesunutí aplikace.
Http-kit
Účel: server start up
Kód: https://github.com/http-kit/http-kit
událost-řízený, vysoce efektivní HTTP server/client library zahrnuje WebSocket, stejně jako asynchronní podporu.
jak Http-kit funguje?
je to Knihovna pro organizaci správné interakce webového serveru. Http-kit je vhodný pro vysoce souběžné asynchronní nebo synchronní aplikace. Pokud jde o WebSocket a HTTP dlouhé dotazování/streamování, je lepší mít jednotné API.
Důvody pro použití Http-kit
Flexibilní řešení
Http-kit nabízí možnost pracovat jak s sync a async systémy. První možnost je jednoduchá, zatímco druhá funguje rychleji. Takže si můžete vybrat na základě svého konkrétního účelu. Kromě toho můžete použít knihovnu s kroužkem. Funguje to téměř jako adaptér Mola.
pohodlné použití
knihovna zajišťuje podporu pro WebSockets, stejně jako perfektní zpracování dlouhodobých požadavků HTTP. Vytvoření aplikace v reálném čase je tedy snazší. A co víc, je to open source projekt. Knihovna je k dispozici na Githubu pod licencí Apache verze 2.0.
vynikající výsledky
HTTP-kit vykazuje vysoký výkon a pracuje rychle i přes velké zatížení. Současně každé připojení vyžaduje pouze několik kB paměti. Klient/server, který je napsán od nuly, je k dispozici jako jediný ~90kB JAR s 0 závislostmi a ~3k řádky jasného kódu.
mnoho vývojářů softwaru považuje HTTP-kit za základní nástroj pro programování Clojure.
Compojure a Bidi
Účel: směrování na server
Kód: https://github.com/juxt/bidi, https://github.com/weavejester/compojure
Oba Compojure a Bidi jsou technologie pro směrování v web apps. První knihovna je mezi komunitou docela populární, zatímco druhá je známá jako užitečné řešení pro psaní v ClojureScript.
jak fungují Compojure a Bidi?
tyto malé knihovny zajišťují směrování na webovém serveru. Výsledkem je, že vývojář softwaru může psát aplikace, které se skládají z několika samostatných částí.
jaký je mezi nimi rozdíl?
2 knihovny plní stejnou funkci. Ale, na rozdíl od Compojure, Bidi:
- podporuje jak clj a cljs
- je izomorfní a rozšiřitelný
hlavní rozdíl je, že v Bidi trasy jsou datové struktury. Nejsou zde žádná makra. Knihovna tak poskytuje pohodlný obousměrný přístup a další výhody. Někteří weboví vývojáři dávají přednost Bidi, protože zobrazuje každou trasu konkrétního psovoda. Kromě toho existuje možnost číst trasy z konfiguračního souboru, generovat a transformovat je pomocí funkcí a introspektu. Pracují nezávisle na vyřizovaných požadavcích. Vývojář se tedy může shodovat s věcmi, které nemusí být nutně manipulátory(například klíčová slova).
Lacinia
Účel: provádění GraphQL v Clojure programování
Kód: https://github.com/walmartlabs/lacinia
Tento populární knihovna Clojure je užitečné pro ty, kteří chtějí realizovat GraphQL při práci s web Api.
jak přípravek Lacinia působí?
původně byl GraphQL napsán v JavaScriptu. Lacinia je oficiálním odkazem na tuto implementaci. Je psán analogicky s počáteční specifikací. To může být nazýváno backend-agnostic GraphQL query execution engine. Knihovna tedy poskytuje kontakt mezi vašimi daty a klientem GraphQL.
Důvody pro použití Lacinia
Pomocí GraphQL, můžete snadno získat bohatší, více komplikovat Web API. Lacinia zjednodušuje vývoj API, protože podporuje inline / pojmenované fragmenty dotazů, introspekci schématu GraphQL, předplatné, rozhraní, odbory, enumy, vstupy a vlastní skaláry.
knihovna, napsaná v jazyce schématu založeném na EDN, dokonale pracuje s dotazy GraphQL. Je postaven na Antlr4. Lacinia pomáhá bohaté efektivní asynchronní spuštění dotazu. Můžete jej připojit do libovolného potrubí Clojure HTTP a použít doprovodnou knihovnu lacinia-pedestal pro podporu HTTP.
HoneySQL a HugSQL
účel: úspěšná interakce s databází
kód: https://github.com/jkk/honeysql, https://github.com/layerware/hugsql
mnoho webových programátorů se cítí pohodlněji pracovat s technologiemi SQL, jako jsou Oracle, MS SQL, MySQL, PostgreSQL, SQLite atd. HoneySQL a HugSQL jsou stavitelé dotazů, kteří poskytují stabilní přístup k databázím SQL v aplikacích Clojure.
jak fungují HoneySQL a HugSQL?
obě knihovny zajišťují začlenění SQL v programování Clojure. Takže budete moci psát příkazy databáze SQL i ve webových aplikacích Clojure.
jaký je mezi nimi rozdíl?
pomocí HugSQL začnete psát samostatné soubory SQL a vkládat je do aplikace. Konstruktor dotazů je inspirován jinou populární knihovnou, YeSQL. To nejen analyzuje SQL soubory do Clojure funkcí, ale je také vhodný pro více případů použití než YeSQL. HugSQL je aktivně udržován. Má adaptéry založené na protokolu podporující více databázových lib.
HugSQL má několik výhod, díky 2 základní funkce:
- dotazy jsou psány přímo jeden dotaz pro každou požadovanou funkci;
- dotazy jsou psány v SQL.
HugSQL pros
HugSQL poskytuje oddělení syntaxe Clojure a sémantiky SQL (co a jak).
- popíšeme, CO dělat v Clojure
(get-user-e-maily-o-uživatelské jméno “Alexandr Petrov”) ;->
- popíšeme, JAK to udělat v SQL
— :jméno uživatele-e-maily-o-uživatelské jméno 😕 : *
vyberte user_emails.e-mail z user_emails kde user_emails.user_id =: id
v důsledku toho můžeme změnit logiku získávání dat přímo v SQL, aniž bychom přepisovali kód Clojure. Je užitečné, když se změní schéma databáze a starý dotaz nevrátí potřebnou strukturu.
kromě toho je SQL sám o sobě mnohem výkonnějším nástrojem pro práci s konkrétním DBMS. Umožňuje psát velké složité dotazy s “připojit”, agregace a funkce okna, což může být v Clojure velmi obtížné.
kromě toho SQL umožňuje použití výhod konkrétního DBMS (například Postgres). Je důležité, pokud jste si jisti, že databáze nebude změněna.
HugSQL cons
- je obtížné změnit DBMS uprostřed projektu. Bude nutné zkontrolovat mnoho požadavků a pečlivě otestovat podporu syntaxe a konkrétní výstup.
- parametry můžete předávat dotazům SQL. V některých případech však musí být části dotazů závislé na určitých podmínkách. Ačkoli úryvky HugSQL umožňují dokončení tohoto úkolu, častěji to musíte udělat pomocí Clojure.
HoneySQL neposkytuje takové oddělení kódu SQL a Clojure. Dotazy uvidíte jako mapu.
HoneySQL pros
- je nezávislý na konkrétní implementaci DBMS, protože se obvykle vyhýbá přímým dotazům SQL. Místo nich používá specifické DSL.
- umožňuje udržovat vlastní DSL na základě funkcí/Maker Clojure. Můžete také vytvořit Tvůrce dotazů s ukládáním mezilehlých požadavků na straně Clojure. Pokud například potřebujete definovat uživatele pomocí ID nebo jiné složité logiky, můžete uložit část struktury HoneySQL. Ukáže se, že potřebujeme přesně uživatele, nikoli zboží nebo jiná data. Tento “fragment” lze nahradit potřebnými dotazy. V důsledku toho získáte kratší kód.
HoneySQL nevýhody
- To může být náročné, používat výhody konkrétní DBMS, stejně jako psát složité dotazy (například, s Funkcí Okna)
- Clojure programátor potřebuje oddělit kód pro načítání dat a kódu pro zpracování těchto údajů. Oddělení vede k další práci na refaktoringu.
danielsz / system
účel: podpora modulární architektury
kód: https://github.com/danielsz/system
užitečná technologie pro vývoj vysoce modulárních aplikací v Clojure. Rámec podporuje efektivní interakci mezi moduly a má dobrou kompatibilitu s ostatními částmi rozmanitého ekosystému Clojure.
jak danielsz/system funguje?
knihovna umožňuje webovému programátorovi používat přístup založený na komponentách. Takže můžete vytvořit aplikaci pomocí modulů/komponent a spojení mezi nimi. Každá součást je speciální objekt. Má svůj vlastní životní cyklus. Programátor popisuje, jak začíná, co potřebuje začít a jak se zastaví.
naše aplikace se například skládá z webového serveru a databáze. Nemá smysl spouštět webový server před aktivací databáze. Popíšeme komponentu databáze, popíšeme komponentu serveru a závislost serveru na databázi. Při spuštění projektu označujeme, že musíme spustit webový server. Knihovna se automaticky pokusí aktivovat databázi. Poté, pokud je to možné, spustí server a přenese hotovou aktivovanou komponentu databáze do komponenty webového serveru. V případě potřeby bude systém zastaven.
Důvody pro použití danielsz/systém
na Rozdíl od popisu celé aplikace s řadou obyčejných Clojure funkce, popis projektu, jako součásti umožňuje snadno nahradit jednu složku s jinou. Například při testování aplikace, nahrazení jedné databáze jinou nebo její úplné vypnutí a nahrazení aktuálními daty.
v případě funkcí byste změnili staré funkce za nové. Budou mít stejný název, který často způsobuje chyby. danielsz / system je hotová sada řešení (pro webový server, databázi a mnoho dalšího), organizovaná jako sada komponent.
doufám, že nyní lépe pochopíte, jak používat Clojure a jaká technická řešení by měla být implementována do vašeho projektu. Moje další články budou zahrnovat výhody tohoto mocného a krásného jazyka, stejně jako několik tipů na vývoj webových aplikací, služeb a API. Tak, přihlásit se k FreshCode blog, pokud se chcete dozvědět více o Clojure programming world.