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

Ertuğrul Çetin
2 min readApr 3, 2020

--

Clojure’un dinamik ve esnek yapısı sayesinde JVM (Java Virtual Machine) üzerinde web uygulamaları geliştirmek bir hayli hızlı ve eğlenceli. Yazının sonunda Clojure ile ilgili birçok kaynağı sağladım.

Gerekli Uygulamalar

Proje Oluşturma

Terminalde projeyi kurmak istediğiniz dizine gidin ve alttaki komutu çalıştırınız. (Bendeki dizin ~/IdeaProjects)

lein new app clj-web-app

Dependencies (Bağımlılıklar)

İşlem bittikten sonra Leiningen birçok dosya ve klasör oluşturacaktır, project.clj dosyasını açıp görseldeki gibi eklemeleri yapalım.

  • Ring, Clojure için HTTP server abstraction sağlıyor içinde Jetty Adaptörü ile birlikte geliyor. (Tabii Jetty yerine istediğiniz Web sunucusunu kullanabilirsiniz.)
  • Patika, Routing ve RESTful yapısı sağlayan bir kütüphane. Kendim yaptım diye söylemiyorum ama çok temiz bir arayüze sahiptir :)
  • :main, Leiningen’in uygulamayı çalıştırabilmesi için -main fonksiyonunun bulunduğu namespace.

Sunucu ve Servisleri Oluşturma

Şimdi /src/clj_web_app/core.clj dosyasına gidelim ve aşağıdaki kodu ekleyelim.

Neler yaptık?

  • home, GET HTTP metoduna ve “/” path’ine sahip, geriye HTML döndüren bir servis
  • users, GET HTTP metoduna ve “/users” path’ine sahip, geriye kullanıcıları JSON formatında döndüren bir servis
  • print-request, GET HTTP metoduna ve “/print-request” path’ine sahip, geriye Request (Hash-Map veri türünde) bilgisini PLAIN/TEXT formatında döndüren bir servis
  • handler, tüm routeların olduğu değişken. :resource-ns-path, src/clj_web_app dizini altındaki namespace’leri tarar ve tüm resource’ları bulup döndürür
  • Son olarak da Jetty Web sunucusunu ve uygulamayı çalıştıran -main fonksiyonunu oluşturduk.

Final

Uygulamayı çalıştırmak için proje dizininde alttaki komutu çalıştırın

lein run

Uygulamamız http://localhost:3000'de ayağa kalmış olacaktır.

Bir sonraki bölümde Middleware konusunu ele alıp, web uygulamamızı bir sonraki seviyeye taşıdım. Sıkılmayıp yazımı buraya kadar takip ettiğiniz için teşekkür ederim.

Örnekteki koda GitHub reposundan erişebilirsiniz.

Clojure Kaynakları

Blog Yazılarım

--

--