rest - 在 Clojure 中开发 RESTful Web 服务的良好起点是什么?

标签 rest web-services frameworks clojure

我正在研究一些轻量级的东西,至少应该支持以下功能:

  • 支持通过元数据轻松定义操作
  • 将请求中的参数提取到 clojure 映射中或作为函数参数的包装器
  • 支持多种形式的身份验证(基本、表单、Cookie)
  • 基于api方法元数据的基本授权
  • 封装在 clojure 映射中的 session 对象
  • 从 REPL 进行实时编码(无需重新启动服务器)
  • 返回值自动序列化为json和xml
  • 具有良好的(可插入)url 参数处理(例如/action/par1/par2 而不是/action?par1=val1&par2=val2)

我知道为这些选项中的每一个推出我自己的微框架相对容易,但如果类似的东西已经存在,为什么还要重新发明轮子呢?特别是如果是:

  • 项目活跃,贡献者/用户数量不断增加
  • 至少拥有基本的在线文档和教程。

最佳答案

首先,我认为您不太可能找到一个单一的收缩解决方案来在 Clojure 中完成所有这些工作(除非以通过互操作使用的 Java 库的形式)。正在成为 Clojure 标准 Web 堆栈的内容由许多库组成,人们以各种方式混合和匹配这些库(因为它们很乐意完美兼容)。1

以下是您可能会觉得有用的一些构建 block 的列表:

  1. Ring -- Clojure 的基本 HTTP 请求处理库;我所知道的所有其他 webby 库(用于编写路由等)都与 Ring 兼容。 Ring 正在积极开发,拥有强大的社区,编写得非常好,并且有一个很好的 SPEC 文档详细介绍了其设计理念。 This blog post 提供了一个很好的示例,说明如何使用它(响应 GitHub 提交)。

  2. Sandbar -- 目前是一个身​​份验证库,计划提供更多类型的功能;正在开发中。

  3. Compojure——一个成熟而强大的库,它提供了一个很好的 DSL,用于编写在 Ring 之上使用的路由。这将为您提供良好的 URL 参数处理。

  4. Compojure-rest ——“一个在 Compojure 之上构建 RESTful 应用程序的库”。据我所知,Compojure-rest 还处于发展的早期阶段。也许您可能会将此视为影响其设计的机会。 :-)

  5. 对于处理 XML,有 clojure.contrib.lazy-xml(以及辅助库 clojure.contrib.zip-filter.xml)和 Enlive (内置的 clojure.xml 命名空间目前不太可用);这些将串联使用(尽管出于您的目的,前者可能就足够了)。

  6. 对于 JSON,contrib 和 clojure-json 中有一个库(我认为至少还有一个我现在似乎忘记的库......);选择您最喜欢的一个。

所有人都会对 REPL 驱动的开发风格感到非常满意(请参阅 this SO question 的公认答案,了解 Ring 技巧,这非常符合这里的目的)。我认为上面的链接集合确实留下了一些盲点(特别是,据我所知,身份验证故事仍在解决中),但希望这是一个好的开始。

<小时/>

1据我所知,在 Clojure 中构建 Web 应用程序的唯一单包解决方案是 Conjure ,其灵感来自于 Rails;不幸的是,我不得不承认我对此了解不多,所以如果您感兴趣,请点击链接并查看来源、wiki 和c。

关于rest - 在 Clojure 中开发 RESTful Web 服务的良好起点是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3180688/

相关文章:

rest - 如何从命令行使用 BigQuery REST API?

java - 是否有用于包装 Text/XML/JSON 数据服务的语言中立 API 生成器?

javascript - 使用 ng-repeat 将表格行数据显示为模态

c# - ASP.Net Web API 与 WCF,我应该在我的项目中选择哪一个

java - 如何使用 Spring WebServiceTemplate 禁用 SSL 证书检查?

ios - lipo 无法打开输入文件(没有这样的文件或目录)xcode

iOS 6 API 和向后兼容性

python - FastAPI Hello World 示例 : Internal Server Error

javascript - CakePHP REST API 为 AJAX 提供 403 但不为 cURL

java - Axis2 和 Web 服务