Saya kira ini adalah pertanyaan aneh bagi sebagian besar programmer yang bekerja setiap hari dengan Java. Bukan saya. Saya tahu bahasa Jawa, karena saya bekerja di proyek Java, tetapi bukan Java-the-world. Saya tidak pernah membuat aplikasi web dari awal di Jawa. Jika saya harus melakukannya dengan Python, Ruby, saya tahu ke mana harus pergi (Django atau Rails), tetapi jika saya ingin membuat aplikasi web di Clojure, bukan karena saya dipaksa untuk hidup di dunia Jawa, tetapi karena saya suka bahasa dan saya ingin mencobanya, perpustakaan dan kerangka kerja apa yang harus saya gunakan?
216
Jawaban:
Sejauh ini kerangka kerja web Clojure terbaik yang belum saya temui adalah Compojure: http://github.com/weavejester/compojure/tree/master
Ini kecil tapi kuat, dan memiliki sintaks yang indah elegan. (Ini menggunakan Jetty di bawah tenda, tetapi menyembunyikan API Servlet dari Anda kecuali Anda menginginkannya, yang tidak akan sering). Lihat README di URL itu, lalu unduh snapshot dan mulai mainkan.
sumber
Compojure tidak lagi merupakan kerangka kerja yang lengkap untuk mengembangkan aplikasi web. Sejak rilis 0.4, compojure telah dipecah menjadi beberapa proyek.
Ring menyediakan fondasi dengan mengabstraksi permintaan HTTP dan proses respons. Dering akan menguraikan permintaan yang masuk dan menghasilkan peta yang berisi semua bagian permintaan seperti uri, nama server dan metode permintaan. Aplikasi kemudian akan menangani permintaan dan berdasarkan permintaan menghasilkan respons. Respons direpresentasikan sebagai peta yang berisi kunci berikut: status, header, dan tubuh. Jadi aplikasi sederhana akan terlihat seperti:
Satu bagian lain dari Ring adalah konsep middle-ware. Ini adalah kode yang berada di antara pawang dan permintaan masuk dan / atau respons keluar. Beberapa perangkat bawaan yang dibangun termasuk sesi dan stacktrace. Perangkat tengah sesi akan menambahkan: kunci sesi ke peta permintaan yang berisi semua info sesi untuk pengguna yang membuat permintaan. Jika kunci: sesi ada di peta respons, itu akan disimpan untuk permintaan berikutnya yang dibuat oleh pengguna saat ini. Sementara stack stack middle-ware akan menangkap setiap pengecualian yang terjadi saat memproses permintaan dan menghasilkan jejak stack yang dikirim kembali sebagai respons jika ada pengecualian yang terjadi.
Bekerja secara langsung dengan Ring bisa membosankan, jadi Compojure dibangun di atas Ring yang mengaburkan detailnya. Aplikasi sekarang dapat diekspresikan dalam hal perutean sehingga Anda dapat memiliki sesuatu seperti ini:
Compojure masih bekerja dengan peta permintaan / respons sehingga Anda selalu dapat mengaksesnya jika diperlukan:
Dalam hal ini bagian {uri: uri} mengakses kunci: uri di peta permintaan dan menetapkan uri ke nilai itu.
Komponen terakhir adalah Hiccup yang membuat menghasilkan html lebih mudah. Berbagai tag html direpresentasikan sebagai vektor dengan elemen pertama yang mewakili nama tag dan sisanya menjadi badan tag.
"<h2>A header</h2>"
menjadi[:h2 "A Header"]
. Atribut tag ada di peta opsional."<a href='/login'>Log In Page</a>"
menjadi[:a {:href "/login"} "Log In Page"]
. Berikut ini adalah contoh kecil menggunakan templat untuk menghasilkan html.Berikut ini tautan ke draf kasar beberapa dokumentasi yang saat ini sedang ditulis oleh penulis compojure yang mungkin berguna bagi Anda: Compojure Doc
sumber
Ada juga "Noir" ( http://www.webnoir.org/ ), yang merupakan kerangka kerja web Clojure baru (jadi baru dokumennya belum ada di sana). Berasal dari Django / Rails, saya menggali sintaksis yang sederhana dan langsung dan sangat ramping.
sumber
Pertimbangkan kerangka kerja Luminus . Saya tidak memiliki afiliasi tetapi telah mendengar hal-hal baik dari teman yang saya hormati.
sumber
Pustaka web saya yang sekarang adalah yada .
Jika Anda baru memulai, server pengantar adalah
Compojure
. Saya melihatnya sebagaiapache
server web di dunia Clojure (dalam hal ini yada / aleph akan menjadi nginx). Anda bisa menggunakannyaLuminus
sebagai templat. Ada variasinya, seperticompojure-api
.Saya mencoba ou
Pedestal
dan secara global puas dengannya. Saya tidak mengklaim menguasainya, tetapi memiliki sintaks yang menyenangkan, terasa sangat kohesif, dan sepertinya memang memiliki kinerja yang hebat. Ini juga didukung olehCognitect
(perusahaan Clojure / Datomic tempat Rich Hickey bekerja).Saya menemukan
Aleph
menyajikan abstraksi yang menarik, dan tekanan balik bawaan tampaknya menarik. Saya belum bermain dengan itu, tapi itu pasti ada dalam daftar saya.Setelah bermain sedikit dengan berbagai server web, berikut adalah daftar Pro / Kontra saya:
Jawaban singkat: lihatlah Luminus untuk memulai dengan cepat, mungkin beralih ke hal lain saat kebutuhan Anda berkembang (Yada mungkin).
Compojure
Pro (1):
Kontra (2):
Alas
Pro (3):
Kekurangan (4):
Aleph
Pro (3):
Kekurangan (1):
Yada
Pro (3):
Kekurangan (1):
HttpKit
Pro (2):
Kontra (2):
Nginx-Clojure
Catatan: Saya belum bermain dengannya, terutama karena kurangnya dokumentasi. Itu terlihat menarik, dan sangat performant.
Pro (2):
Kekurangan (1):
Immutant
Catatan: Saya belum memainkannya.
Pro:
Cons:
Catacumba
Catatan: Saya belum memainkannya, meskipun dokumentasinya terlihat bagus. Saya mungkin akan mencobanya nanti. Ada contoh proyek obrolan yang terlihat menarik, penggunaan protokol yang banyak membuat saya awalnya sebagai dev Clojure pemula.
Pro (6):
Kontra (2):
Catatan : tolok ukur server web Clojure tersedia, jika hanya kinerja mentah yang penting.
sumber
Hari-hari ini Alas adalah kerangka yang patut dilihat. Ini adalah kerangka kerja sisi server yang dibuat di atas Dering , tetapi juga membebaskan permintaan yang masuk dari utas awal dengan dapat menjeda dan melanjutkan permintaan tertentu (jika tidak, permintaan yang lambat benar-benar memblokir serverthread itu). Mungkin semacam JavaBean.
Kerangka keren lainnya adalah hoplon.io dan David Nolen Om (berdasarkan Bereaksi)
sumber
Webjure , kerangka pemrograman web untuk Clojure.
Fitur: Pengiriman fungsi servlet panggilan Clojure. Generasi HTML dinamis. Antarmuka kueri SQL (melalui JDBC).
Jawaban ini dimaksudkan sebagai pengganti untuk informasi Webjure.
sumber
Compojure adalah apa yang saya gunakan untuk membangun aplikasi blogging kecil. Ini dimodelkan pada Sinatra, yang merupakan kerangka web minimal, ringan untuk Ruby. Saya kebanyakan hanya menggunakan routing, yang sama seperti milik Sinatra. Sepertinya:
Tidak ada ORM atau templating library, tetapi memang memiliki fungsi yang mengubah vektor menjadi HTML.
sumber
Anda juga dapat melihat kerangka kerja ini (diambil dari disclojure / proyek ):
Ada juga satu lagi pertanyaan terkait pada Stack Overflow: Kerangka kerja web Mature Clojure?
sumber
Penafian: Saya penulis.
Saya mengumpulkan leiningen template yang menggabungkan luminusweb dan chestnut. Jadi Anda mendapatkan sesuatu yang bisa Anda buat dengan kode clojure dan kode clojurescript untuk depan dan backend.
Selain itu ia menyediakan manajemen pengguna ditambah beberapa generasi CRUD sederhana dan beberapa lagi bagus untuk dimiliki: https://github.com/sveri/closp
sumber
Saya akan memberikan dua sen untuk Duct , juga dari @weavejester , pengelola Compojure dan Ring.
Pada intinya, ia membawa Component dan Ring router di bawah satu atap. Alasan mengapa saya menggunakan Duct:
Fitur utama:
Catatan: Tidak perlu dikatakan lagi, tetapi untuk kepentingan pendatang baru pengembangan web, seperti kebanyakan hal Clojurey, Duct membutuhkan pemahaman yang kuat tentang bahasa Clojure. Saya juga merekomendasikan membaca tentang Komponen terlebih dahulu.
Pada catatan pribadi lain, saya telah menggunakan Duct di beberapa aplikasi produksi selama lebih dari satu tahun sekarang dan saya sangat senang dengannya.
sumber
Anda juga dapat mencoba Clojure on Coils, http://github.com/zubairq/coils - penafian: Saya penulisnya
sumber
Server web lain yang menarik adalah Http-kit . Ini memiliki kinerja yang baik dan memenuhi persyaratan dering, serta memiliki dukungan untuk WebSockets juga. Itu sebagian besar dibuat dalam clojure, dan tidak memiliki beberapa hal aneh di Jetty / Tomcat.
Mudah untuk bermain-main.
sumber
Reframe dan om.next mungkin yang Anda cari.
sumber
Arachne adalah kerangka web pendatang baru. Mengutip deskripsi situs:
Ini memiliki kampanye kickstarter mengklaim untuk menawarkan pengalaman "memulai" mirip dengan Rails. Ini dikembangkan oleh Cognitect.
Berikut ini adalah diskusi yang bagus tentang hal itu dengan penulis Luminus (yogthos).
sumber
Saya telah menggunakan Liberator dengan sukses dalam produksi untuk sementara waktu sekarang. Ini adalah kerangka kerja yang bagus jika Anda hanya ingin tulang kosong misalnya jika Anda sedang membangun layanan web yang tenang atau yang serupa. Ini pada dasarnya pembungkus untuk cincin dan compojure dan memberikan grafik keputusan saat memvalidasi permintaan yang masuk. Ini juga sangat cepat dibandingkan dengan kerangka kerja web lainnya yang lebih besar. Jika Anda ingin memulai suatu tempat dengan cepat dan perlahan membangun maka Liberator adalah pilihan yang bagus.
sumber