通过 Spray 创建简单的 Restful Http Server
好久没写文章,实在太忙。最近我在项目中,搭建了很多小的零散的 Restful 服务,各个服务之间通过rest接口调用,相互协作。
Java出身的码农,动辄就是Tomcat、Spring,RestEasy、Hibernate、JPA、Jackson、HttpClient… 这些巨无霸非常臃肿,其实我的项目就是一个简简单单的Rest服务,请求Json参数 → 调用资源接口 → 返回Json数据,还好有Spray!
使用Scala系的工具,无论是体重上(包的大小)还是身高上(代码的长度),都能极大的减负,同时提升逼格和优雅度。下面介绍一个简单的Restful Http Server的开发示例。
首先安装 SBT(简单理解为scala下的maven),安装方法参考 sbt documentation - setup。
win7环境下,直接下载 0.13.1-zip包 解压到c:\sbt,配置SBT_HOME到path,cmd中敲入sbt检查有无成功,%SBT_HOME%\conf\sbtconfig.txt中可以配置启动参数。
# Set the java args to high |
1、-Dfile.encoding 配置成 ISO-8859-1 而不是 UTF-8,是因为在 cmd 下按键盘的上下键,无法切换历史输入的sbt命令,显示全是乱码,这让我很不爽,只好忍痛ISO啦。
2、-Dsbt.boot.directory 和 -Dsbt.ivy.home 是为将sbt自动下载的jar放到非系统盘,以免统一管理,这个看个人爱好。
下面跑一个官方的例子,从Spray的官方文档 Getting Started 上,找到 spray-template,在branch中下载1.3版的 spray-can sample。
解压,执行sbt命令。在浏览器运行 http://127.0.0.1:8080 看结果。
sbt |
build.sbt 已配置 Revolver.settings,可使用命令:re-start和re-stop,详细参考 sbt-revolver。
瞄一下 src/main/scala/com/example/MyService.scala,可以看到只有简单的。
trait MyService extends HttpService { |
Boot方法启动一个Actor并绑定到8080端口。
object Boot extends App { |
在 spray-servlet on jetty 分支下,有部署到servlet容器的工程模板代码。另外在 Spray 项目的源代码下,也有一些 example,找到 spray-can/simple-http-server,也可以试着跑一下,其中的 DemoService.scala 例子内容比较多。
更多玩法参考 wiki example-projects 或 document spray-can。
又要忙项目,推荐两个文章吧,自己写 spray 工程可以参考一下:Building REST Service with Scala、API first REST in Akka and Spray、stockman。