使用Lisp的Web服务

Mat*_*sch 18 lisp rest web-services

我很好奇使用Lisp来支持现代RESTful Web服务,但鉴于许多变种和实现,很难知道从哪里开始.

我确信有人在那里使用Lisp进行网络相关的应用程序(只是在SO上显示这些问题,但是我想知道的是有没有任何更适合Web服务的Lisp实现?(例如,本机unicode支持,内置的web相关库,性能等)

我不是在寻找unicode"hacks"或web框架.我最感兴趣的是你开箱即用的东西.虽然我对CLISP上的Common Lisp有一些小经验(作为本科计算机科学课程的一部分的通用多项式计算器),但我还没有使用任何Lisp派生或实现.很高兴知道这个问题是否有特别好的选择,特别是那些以这种方式实际使用过Lisp的人.

Mat*_*ard 13

Racket的标准库包含一个 Web服务器库.我玩过它,但觉得它不适合我喜欢用Lisp工作的互动方式.它确实有一些很好的功能,比如基于延续的控制流程,所以值得一看.

从个人经验来看,Common Lisp是Web开发的绝佳选择.这就是我的博客是在落实. Hunchentoot简洁,功能强大,非常Lispy.支持交互式编程以及可以想象,并且有Websockets之类的插件(尽管我还不需要).

也就是说,Clojure中的 Web编程同样令人愉快.我使用Clojure和Noir为我的家人实现了一个基于网络的社区中心.Stylewise,Noir非常类似于Hunchentoot和cl-who的组合.作为奖励,访问Java库非常有用.(在我的例子中,实现OpenID登录支持,使用Common Lisp很困难,与Clojure一样轻松.)因此,如果您的应用程序需要与第三方Web服务或数据格式交互,我建议采取好好长久看看Clojure.

REST接口在Hunchentoot/Noir风格的Web框架中也很容易实现.我不能在这方面判断Racket的网络服务器,因为我对它不够熟悉.

  • @MattEsch使用Hunchentoot,您可以使用`request-method*`函数访问请求方法.甚至`define-easy-handler`也不关心动词 - 你可以根据需要做一个`CASTMAGIC`请求,它会起作用.:)(尝试编写一个只返回`(symbol-name(hunchentoot:request-method*))`的简单处理程序.)使用Noir,可以直接支持标准HTTP动词(`GET`,`POST`,` PUT`,`DELETE`,`HEAD`)在调度机制中.Hunchentoot和Noir都允许您访问HTTP请求标头. (2认同)

Jua*_*tas 6

我知道一个可能符合你的需要:克拉克

Clack是Common Lisp的Web应用程序环境,受Python的WSGI和Ruby的Rack的启发.

希望能帮助到你.