Clojure ile Örnek Web Uygulaması — Bölüm 2

Ertuğrul Çetin
2 min readApr 9, 2020

--

Bölüm 1'de basit bir web uygulaması ayağa kaldırmıştık, bu bölümde ise middleware kavramını işleyip, önceki bölümde yaptığımız uygulamaya yeni yetenekler kazandıracağız.

Middleware

Middleware’ler aslında çok basit bir yapıya sahiptirler, ara katman olarak görev yaparlar. Bir istek geldiği zaman (bu istek hash map veri yapısı formundadır ve key value pairlerine sahiptir), middleware fonksiyonlarından geçer ve bu fonksiyonlar isteği (hash map’i) manipüle ederek bazı yeni key value pairleri eklerler. Java dünyasındaki Servlet Filters ve Spring Interceptors’lere benzetebilirsiniz.

Uygulamamızın sahip olduğu “/print-request” endpointini tarayıcınızda çağırırsanız gelen isteğin formunu ve içeriğini görebilirsiniz.

Middleware’leri Ekleme

/src/clj_web_app/core.clj dosyamızda bulunan :require alanına middleware namespaclerimizi ekleyip alttaki gibi güncelliyoruz.

wrap-gzip middleware’i bir kütüphane aracılığı ile eklendi onun için project.clj’ye gidip [amalloy/ring-gzip-middleware “0.1.4”] paketini ekleyelim.

Neler Yaptık?

  • Routlerımızı farklı bir değişkene (app-routes) tanımladık, handler değişkeni oluşturduk. Handler değişkeni routelarımızı zincirleme bir şekilde middleware fonksiyonlarından geçirmektedir.
  • wrap-reload, ring’in içinde gelen bir middleware. Kod üzerinde yaptığınız değişiklikleri direkt yansıtır böylelikle sunucuyu tekrar başlatmak zorunda kalmazsınız. :handle-ok fonksiyonlarının içeriğini değiştirip ardından sayfayı yenileyip deneyebilirsiniz. Yeni servis de ekleyebilirsiniz.
  • wrap-some-data, bizim kendi yazdığımız bir middleware. Request geliyor, gelen request’e :site-owner key’i ve key’e karşılık gelen “Ertuğrul” değerini ekliyoruz. Güncellenmiş request’i (hash map’i) handler fonksiyonuna, yani bir sonraki middleware’e gönderiyoruz. Böylelikle bir sonraki middleware request’te :site-owner “Ertuğrul” key-value pairini görüyor olacak.
  • wrap-cookies, ring’in içinde gelen bir middleware. Client’ın cookielerini request’e ekliyor.
  • wrap-gzip, gerekli gzip ayarlarını ekleyen bir middleware. Üçüncü bir paket şeklinde ekledik.

Final

Proje dizini altında lein run komutunu çalıştırarak yeni eklediğimiz yetenekleri deneyebilirsiniz. Middleware’ler mantık olarak çok basit/sade yapılardır, bizlere çok ciddi kolaylıklar sağlamaktadırlar.

Örnekteki koda GitHub reposundan erişebilirsiniz.

Clojure Kaynakları

--

--