Clojure programming: frameworks and other tools
bár ezek a libek célja a Clojure programozási feladatok egyszerűsítése, megzavarhatják a kezdőt. Néha nehéz megérteni, hogyan lehet mindegyiket összerakni, és optimális megoldást találni egy adott feladatra. Tehát most szeretném megmutatni a kedvenc eszközeimet a Clojure programozásához.
- munka webkiszolgálóval és végpontokkal
- interakció webkiszolgálóval és adatbázissal
- útválasztás szerveren
- GraphQL használata a Clojure programozásban
- moduláris architektúra támogatása
kezdjük az utat a Clojure programozás világába!
Megjegyzés: Ha Java-ról és más hasonló nyelvekről indul, tudnia kell, hogy a Clojure-ban nincsenek hagyományos keretek. Minden a libs-en és azok gyűjteményein alapul. Ez rugalmasabbá és többcélúvá teszi a nyelvet.
a Clojure ökoszisztéma különböző összetettségű libeket tartalmaz. Néhány közülük csak egy sor kiegészítő funkció (például egy könyvtár az idővel való munkavégzéshez). Eközben a rendszer libs platformot biztosít a teljes keret létrehozásához. Az ilyen könyvtárak lehetővé teszik a programozó számára, hogy egy alkalmazást komponenskészletként mutasson be, leírja a köztük lévő kapcsolatokat stb. Maga a könyvtár biztosítja a függőségi grafikonok létrehozását. Például átalakíthatja az összetevőket érthetőbb dolgokká, például funkciókká.
cél: kényelmes munka webszerverrel és végpontokkal
Kód: https://github.com/ring-clojure/ring
a HTTP szerver absztrakció kulcsfontosságú eleme Clojure web stack. Lehetővé teszi az egyszerű munkát a webszerverrel és a végpontokkal, ami elengedhetetlen a sikeres alkalmazásfejlesztéshez. A WSGI (Python) és a rack (Ruby) analógiájára létrehozott Ring a HTTP információit egy tiszta, egységes API-ba foglalja. Ennek eredményeként a webfejlesztő komponensekből álló moduláris rendszereket építhet, és megoszthatja ezeket az összetevőket a különböző szerverek és alkalmazások között.
- hogyan működik a gyűrű?
- a Ring
- Http-kit
- hogyan működik a Http-kit?
- a Http-kit használatának okai
- Compojure és Bidi
- hogyan működik a Compojure és a Bidi?
- mi a különbség közöttük?
- Lacinia
- hogyan fejti ki hatását a Lacinia?
- a Lacinia használatának okai
- HoneySQL és HugSQL
- hogyan működik a HoneySQL és a HugSQL?
- mi a különbség közöttük?
- HugSQL pros
- HugSQL cons
- HoneySQL pros
- HoneySQL cons
- danielsz / rendszer
- hogyan működik a danielsz / rendszer?
- a danielsz/system használatának okai
hogyan működik a gyűrű?
HTTP kéréseket kap és HTTP válaszokat ad vissza. Tehát a Ring nem egy úgynevezett webalkalmazás-keretrendszer.
a Ring
mint domináns webes könyvtár használatának okai a Clojure programozásban, a Ring jó választás kezdőknek. Először is, fő feladata, hogy kényelmes felületet biztosítson a webszerverek széles skálájához. Ebből a szempontból a technológia rendkívül hasznos és tökéletesen működik.
egy másik Ring funkció modulkészletet biztosít (‘köztes szoftver’). Tehát lehetővé teszi különböző előre megírt könyvtárak használatát, amelyek kompatibilisek egymással.
a legtöbb Clojure programozó a Ring-et választja a végpontok számára, mert képes használni a köztes programokat. Például ezek a modulok lehetővé teszik a szükséges paraméterek átalakítását egy URL-ről a Clojure kódtérképre. A webfejlesztő könnyen írhat új köztes szoftvert, és integrálhatja azt az ökoszisztémába. Például a cemerick/friend könyvtár használatával teljes mértékben kezelheti az engedélyezési folyamatot, különböző stratégiákat alkalmazhat (a bejelentkezéstől és a jelszótól kezdve, az oAuth-ig) stb. A ring middleware segít a folyamat kényelmes leírásában és elindításában. Bezárja az összes olyan végpontot, amely tilos az illetéktelen felhasználók számára.
a Ring használatával kapcsolatos tapasztalatok fontosak más Clojure technológiákkal való együttműködéshez. Ez az első dolog, amellyel mozoghat egy alkalmazás.
Http-kit
cél: szerver indítása
Kód: https://github.com/http-kit/http-kit
az eseményvezérelt, rendkívül hatékony HTTP szerver / kliens könyvtár magában foglalja a WebSocket-et, valamint az aszinkron támogatást.
hogyan működik a Http-kit?
ez egy könyvtár a megfelelő webszerver-interakció megszervezésére. Http-kit alkalmas erősen egyidejű aszinkron vagy szinkron alkalmazások. Ami a WebSocket-et és a HTTP long polling/streaming-et illeti, jobb, ha egy egységes API-t tartalmaz.
a Http-kit használatának okai
rugalmas megoldás
a Http-kit lehetőséget nyújt mind a szinkron, mind az aszinkron rendszerek használatára. Az első lehetőség egyszerű, míg a második gyorsabban működik. Tehát az Ön konkrét célja alapján választhat. Sőt, a könyvtárat gyűrűvel is használhatja. Szinte úgy működik, mint a móló adapter.
kényelmes használat
a könyvtár biztosítja a Websocketek támogatását, valamint a régóta tárolt HTTP kérések tökéletes kezelését. Így a valós idejű alkalmazás létrehozása könnyebbé válik. Mi több, ez egy nyílt forráskódú projekt. A könyvtár elérhető a Githubon az Apache License 2.0 verzió alatt.
kiváló eredmények
a HTTP-kit nagy teljesítményt mutat, és nagy terhelés ellenére gyorsan működik. Ugyanakkor minden kapcsolat csak néhány kB memóriát igényel. A nulláról írt kliens/szerver egyetlen ~90kB-os JAR-ként érhető el, 0 függőséggel és ~3k tiszta kódsorral.
sok szoftverfejlesztő a HTTP-kit-et a Clojure programozás alapvető eszközének tekinti.
Compojure és Bidi
cél: routing szerveren
Kód: https://github.com/juxt/bidi, https://github.com/weavejester/compojure
mind a Compojure, mind a Bidi technológiák a webes alkalmazások útválasztásához. Az első könyvtár meglehetősen népszerű a közösség körében, míg a második praktikus megoldásként ismert a ClojureScript-ben történő íráshoz.
hogyan működik a Compojure és a Bidi?
ezek a kis könyvtárak biztosítják az útválasztást egy webszerveren. Ennek eredményeként egy szoftverfejlesztő több különálló részből álló alkalmazásokat írhat.
mi a különbség közöttük?
a 2 Könyvtár ugyanazt a funkciót látja el. De, ellentétben Compojure, Bidi:
- támogatja mind a clj, mind a cljs
- izomorf és bővíthető
a fő különbség az, hogy a Bidi útvonalak adatstruktúrák. Itt nincsenek makrók. Tehát a könyvtár Kényelmes kétirányú megközelítést és egyéb előnyöket biztosít. Egyes webfejlesztők inkább a Bidi-t részesítik előnyben, mert egy adott kezelő minden útvonalát megmutatja. Sőt, lehetőség van arra, hogy olvassa el az útvonalakat egy konfigurációs fájlból, generálja és átalakítsa őket funkciók és introspect. A kezelt kérésektől függetlenül működnek. Tehát a fejlesztő olyan dolgokra is megfelelhet, amelyek nem feltétlenül kezelők (például kulcsszavak).
Lacinia
cél: a GraphQL megvalósítása a Clojure programozásban
Kód: https://github.com/walmartlabs/lacinia
ez a népszerű Clojure könyvtár hasznos azok számára, akik szeretnék végrehajtani GraphQL munka közben webes API-kat.
hogyan fejti ki hatását a Lacinia?
eredetileg a GraphQL JavaScript-ben íródott. A Lacinia hivatalos hivatkozás erre a megvalósításra. A kezdeti specifikációval analóg módon íródott. Ezt nevezhetjük backend-agnosztikus GraphQL lekérdezés végrehajtó motornak. Tehát a könyvtár kapcsolatot biztosít az adatok és a GraphQL kliens között.
a Lacinia használatának okai
a GraphQL használatával könnyen gazdagabb, bonyolultabb webes API-t kaphat. A Lacinia leegyszerűsíti az API fejlesztését, mivel támogatja az inline / named query fragmentumokat, a GraphQL séma introspekciót, az előfizetéseket, az interfészeket, a szakszervezeteket, az enumokat, a bemeneteket és az egyéni skalárokat.
EDN-alapú sémanyelven írva a könyvtár tökéletesen működik a GraphQL lekérdezésekkel. Az Antlr4-re épül. Lacinia segít gazdag hatékony aszinkron lekérdezés végrehajtását. Csatlakoztathatja bármilyen Clojure HTTP csővezetékhez, és használhatja a lacinia-talapzat társkönyvtárat a HTTP támogatáshoz.
HoneySQL és HugSQL
cél: sikeres adatbázis interakció
Kód: https://github.com/jkk/honeysql, https://github.com/layerware/hugsql
sok webprogramozó kényelmesebben érzi magát az SQL technológiákkal, például az Oracle, az MS SQL, a MySQL, a PostgreSQL, az SQLite stb. A HoneySQL és a HugSQL olyan lekérdezés-építők, amelyek stabil hozzáférést biztosítanak az SQL adatbázisokhoz a Clojure alkalmazásokban.
hogyan működik a HoneySQL és a HugSQL?
mindkét könyvtár biztosítja az SQL befogadását a Clojure programozásban. Tehát képes lesz SQL adatbázis-parancsokat írni még a Clojure webalkalmazásokban is.
mi a különbség közöttük?
a HugSQL használatával külön SQL fájlok írásával és az alkalmazásba helyezésével kezdődik. A lekérdezési konstruktort egy másik népszerű könyvtár, a YeSQL ihlette. Ez nem csak elemzi SQL fájlokat Clojure funkciókat, de az is alkalmas több felhasználási esetek, mint YeSQL. A HugSQL aktívan karbantartott. Protokoll alapú adapterekkel rendelkezik, amelyek több adatbázis-Libet támogatnak.
a HugSQL-nek számos előnye van a 2 alapvető jellemző miatt:
- a lekérdezések közvetlenül íródnak, minden szükséges függvényhez egy lekérdezés;
- a lekérdezések SQL-ben vannak írva.
HugSQL pros
a HugSQL elkülöníti a Clojure szintaxist és az SQL szemantikát (mit és hogyan).
- leírjuk, mit kell tenni a Clojure-ban
(felhasználó-e-mailek-felhasználónév szerint “Alexandr Petrov”) ;->
- leírjuk, hogyan kell ezt megtenni az SQL-ben
— :név get-user-e-mailek-by-felhasználónév 😕 : *
válassza a user_emails lehetőséget.e-mail a user_emails-től, ahol a user_emails.user_id =: id
ennek eredményeként megváltoztathatjuk az adatok közvetlen SQL-ben történő megszerzésének logikáját, a Clojure kód átírása nélkül. Ez akkor hasznos, ha egy adatbázisséma módosul, és a régi lekérdezés nem adja vissza a szükséges struktúrát.
sőt, maga az SQL sokkal hatékonyabb eszköz egy adott DBMS-sel való munkavégzéshez. Lehetővé teszi a nagy összetett lekérdezések írását “join”, aggregációk és Ablakfunkciók segítségével, ami rendkívül nehéz lehet a Clojure-ban.
ezenkívül az SQL lehetővé teszi egy adott DBMS (például Postgres) előnyeinek használatát. Fontos, ha biztos benne, hogy az adatbázis nem változik.
HugSQL cons
- nehéz megváltoztatni a DBMS-t a projekt közepén. Szükség lesz, hogy ellenőrizze a sok kérést, és gondosan teszt szintaxis támogatás és konkrét kimenet.
- paramétereket adhat át az SQL lekérdezéseknek. Bizonyos esetekben azonban a lekérdezések részeit bizonyos feltételektől kell függővé tenni. Bár a HugSQL kivonatok lehetővé teszik ennek a feladatnak a elvégzését, gyakrabban ezt a Clojure használatával kell megtennie.
a HoneySQL nem biztosítja az SQL és a Clojure kód ilyen szétválasztását. A lekérdezéseket térképként fogja látni.
HoneySQL pros
- független a DBMS konkrét megvalósításától, mivel általában elkerüli a közvetlen SQL lekérdezéseket. Ehelyett speciális DSL-t használ.
- lehetővé teszi a saját DSL fenntartását a Clojure funkciók/makrók alapján. Létrehozhat egy lekérdezés-készítőt is a köztes kérések mentésével a Clojure oldalon. Például, ha egy felhasználót azonosítóval vagy más összetett logikával kell meghatároznia, mentheti a HoneySQL struktúra egy részét. Megmutatja, hogy pontosan a felhasználóra van szükségünk, nem pedig az árukra vagy más adatokra. Ez a” töredék ” helyettesíthető a szükséges lekérdezésekkel. Ennek eredményeként rövidebb kódot kap.
HoneySQL cons
- kihívást jelenthet egy adott DBMS előnyeinek felhasználása, valamint összetett lekérdezések írása (például Ablakfunkciókkal)
- a Clojure programozónak külön kell választania az adatok lekérésére szolgáló kódot és az adatok feldolgozására szolgáló kódot. Az elválasztás további munkát eredményez a refaktorálás során.
danielsz / rendszer
cél: moduláris architektúra támogatása
Kód: https://github.com/danielsz/system
hasznos technológia rendkívül moduláris alkalmazások fejlesztéséhez Clojure-ban. A keretrendszer támogatja a modulok közötti hatékony interakciót, és jól kompatibilis a változatos Clojure ökoszisztéma más részeivel.
hogyan működik a danielsz / rendszer?
a könyvtár lehetővé teszi a webprogramozók számára, hogy komponens alapú megközelítést alkalmazzanak. Tehát létrehozhat egy alkalmazást a modulok/komponensek és a köztük lévő kapcsolatok felhasználásával. Minden komponens egy speciális objektum. Saját életciklusa van. A programozó leírja, hogyan kezdődik, mit kell kezdenie, és hogyan áll le.
alkalmazásunk például egy webszerverből és egy adatbázisból áll. Nincs értelme elindítani a webszervert az adatbázis aktiválása előtt. Leírjuk az adatbázis összetevőt, leírjuk a szerver összetevőt, valamint a szerver függőségét az adatbázistól. A projekt elindításakor jelezzük, hogy el kell indítanunk a webszervert. A könyvtár automatikusan megpróbálja aktiválni az adatbázist. Ezután, ha lehetséges, elindítja a kiszolgálót, és átadja a kész aktivált adatbázis-összetevőt a webszerver-összetevőnek. Ezután szükség esetén a rendszer leáll.
a danielsz/system használatának okai
ellentétben a teljes alkalmazás leírásával a szokásos Clojure funkciókkal, a projekt leírása összetevőként megkönnyíti az egyik összetevő cseréjét a másikra. Például egy alkalmazás tesztelésekor, az egyik adatbázis cseréjekor egy másikra, vagy teljesen kikapcsolva, az aktuális adatokkal helyettesítve.
függvények esetén a régi függvényeket újra cserélné. Ugyanaz a neve lesz, ami gyakran hibákat okoz. danielsz / system egy kész készlet megoldások (egy web szerver, adatbázis, és még sok más), szervezett, mint egy sor alkatrészek.
remélem, most már jobban megérted, hogyan kell használni a Clojure-t, és milyen technológiai megoldásokat kell végrehajtani a projektben. További cikkeim tartalmazzák ennek az erőteljes és gyönyörű nyelvnek az előnyeit, valamint néhány tippet a webes alkalmazások, szolgáltatások és API-k fejlesztéséhez. Tehát iratkozzon fel a FreshCode blogra, ha többet szeretne megtudni a Clojure programozási világról.