2012-04-07 72 views
16

我對使用Lisp來支撐現代RESTful Web服務感到好奇,但考慮到許多變體和實現,很難知道從哪裏開始。使用Lisp的Web服務

我確定有人在那裏使用Lisp進行網絡相關的應用程序(只是通過這裏的SO顯示來回答這些問題),但我想知道的是是否有任何Lisp實現更適合於網絡服務比別人?(本地unicode支持,例如,內置的web相關庫,性能等)

我不是在尋找unicode「黑客」或web框架。我最感興趣的是你開箱即用的東西。我沒有將自己與任何Lisp派生或實現結合在一起,儘管我對CLISP(作爲本科計算機科學課程一部分的通用多項式計算器)上的Common Lisp有一些小的經驗。很高興知道這個問題是否有特別好的選擇,特別是那些實際上以這種方式使用Lisp的人。

回答

13

Racket的標準庫包含web server library。我玩過它,但覺得它不適合我喜歡用Lisp工作的互動方式。它確實有一些很好的功能,比如基於連續控制的流程,所以值得一看。

從個人經驗來講,Common Lisp是網站開發的絕佳選擇。這是我的博客的實施。Hunchentoot是簡單而強大,非常Lispy。支持交互式編程以及可以想象的功能,並且還有像Websockets這樣的插件(儘管我不需要這些插件)。

也就是說,網頁編程Clojure是一樣的愉快。我使用Clojure和Noir爲我的家人實施了一個基於Web的社區中心。 Stylewise,Noir與Hunchentoot和cl-who的組合非常相似。作爲獎勵,訪問Java庫可能非常有用。 (在我的情況下,實現OpenID登錄支持,這對於Common Lisp來說很難,用Clojure很容易。)因此,如果您的應用程序需要與第三方Web服務或數據格式進行交互,我建議您善良和長期看Clojure。

REST界面在Hunchentoot/Noir風格的Web框架中也很容易實現。在這方面我不能判斷Racket的網絡服務器,因爲我對它不熟悉。

+0

我已經快速瀏覽了Hunchentoot,但它似乎支持一組有限的動詞,這是正確的嗎? (GET和POST) - 我需要比這更多功能的東西。訪問原始http請求和響應頭文件在Web服務中非常重要。 Clojure/Noir似乎提供這樣的訪問。我認爲球拍還可以訪問原始標題,但它肯定需要快速瀏覽以評估球拍的性質。也許一些球拍倡導者會留下一些評論。 – 2012-04-07 21:19:04

+2

@MattEsch使用Hunchentoot,您可以使用'request-method *'函數訪問請求方法。即使'define-easy-handler'也不關心動詞 - 如果你願意,你可以做一個CASTMAGIC請求,它就可以工作。 :)(嘗試編寫一個簡單的處理程序,它只返回'(symbol-name(hunchentoot:request-method *))'。)Noir在調度機制中直接支持標準的HTTP動詞(GET,POST,PUT,DELETE,HEAD)。 Hunchentoot和Noir都允許您訪問HTTP請求標頭。 – 2012-04-07 23:34:27

+0

感謝您的澄清。我只是困惑,爲什麼這些文檔正在指出特定的動詞GET和POST(就像它是一種新穎的東西)。謝謝你清理那個。我會和Hunchentoot一起去看看我能想出什麼。我現在將問題留給公衆看看是否會產生其他迴應。 – 2012-04-08 00:43:52

6

我知道一個也許適合你的需要:Clack

克拉克是Python的WSGI和Ruby的Rack激發了Common Lisp的網絡應用環境。

希望它有幫助。