Spray是一系列轻量级Scala库,提供基于Akka框架的客户端/服务端REST/HTTP功能。Spray提供了REST/HTTP所需的一系列可集成的组件,并且以纯ScalaAPI的方式实现,没有使用任何遗留的Java库。
Spray的设计理念:
- 完全异步、无阻塞
所有API都是完全异步的,所有实现都避免阻塞的代码。 - 基于Actor和Future
完全基于Akka平台编程模型的实现,基于Akka的核心概念Actor和Future构建。 - 高性能
为高负载环境下实现卓越性能而精心设计实现的低级组件。 - 轻量级
精心管理的依赖,尽量小的依赖关系。 - 模块化
由松耦合的集成组件构成,应用可只依赖需要的部分组件。 - 可测试
spray组件以结构化的方式组成,便于进行测试。
模块
- spray-caching:基于谷歌concurrentlinkedhashmap和Akka Future的快速、轻量级内存缓存。
- spray-can: 基于spray-io上的低级、低成本、高性能的HTTP服务器和客户端。
- spray-client: 基于spray-can的更高级别的客户端HTTP客户端API支持。
- spray-http: 不可变的HTTP请求、响应、常用头模型。该模块完全独立,不依赖任何Akka和其他spray组件。
- spray-httpx: 用于HTTP消息(信息编码、解码、压缩等)高级别的工具集,被spray-client、spray-route引用。
- spray-io: 用于直接将Akka Actors连接到异步Java NIO套接字的低级别网络IO层。可以看做是Scala版的Netty。
- spray-servlet: 提供基于Servlet API之上的spray-canHTTP服务器接口的适配器层。在servlet容器中使用spray-routing。
- spray-routing: 定义RESTful服务的高级别路由的DSL。
- spray-testkit: 便于测试spray-routing服务的DSL,支持ScalaTest和Specs2。
- spray-util: 除了spray-http以外的公用工具类。
- spray-json: 轻量级、简洁的JSON实现。它不依赖任何spray和Akka组件,并在spray-client和spray-httpx中作为可选依赖,它不在spray的代码仓库中。它只是spray提供的一种可选择JSON库。
我们需要的HTTP方式
- 基于case class的模型
- 基于actor的API(消息协议)
- 一等函数
- Scala/Akka Future
- Scala集合
- 类型类
- 类型安全