大发一分彩 首页 > 学霸

用Scala实现简单的Web和API服务器

2019-10-07 14:24 weila

【CSDN 编者按】大家都知道Web和API服务器在互联网中的重要性,在计算机网络方面提供了最基本的界面。本文主要介绍了怎样利用Scala实现实时聊天网站和API服务器,通过本篇文章,你定将受益匪浅。

作者 | Haoyi

译者 | 弯月,责编 | 刘静

出品 | CSDN(ID:CSDNnews)

以下为译文:

Web和API服务器是互联网系统的骨干,它们为计算机通过网络交互提供了基本的界面,特别是在不同公司和组织之间。这篇指南将向你介绍如何利用Scala简单的HTTP服务器,来提供Web内容和API。本文还会介绍一个完整的例子,告诉你如何构建简单的实时聊天网站,同时支持HTML网页和JSON API端点。

这篇文及章的目的是介绍怎样用Scala实现简单的HTTP服务器,从而提供网页服务,以响应API请求。我们会建立一个简单的聊天网站,可以让用户发表聊天信息,其他访问网站的用户都可以看见这些信息。为简单起见,我们将忽略认证、性能、用户挂历、数据库持久存储等问题。但是,这篇文章应该足够你开始用Scala构建网站和API服务器了,并为你学习并构建更多产品级项目打下基础。

我们将使用Cask web框架:

http://www.lihaoyi.com/cask/

Cask是一个Scala的HTTP为框架,可以用来架设简单的网站并迅速运行。

开始

要开始使用Cask,只需下载并解压示例程序:

$ curl -L https://github.com/lihaoyi/cask/releases/download/0.3.0/minimalApplication-0.3.0.zip > cask.zip

展开全文

$ unzip cask.zip

$ cd minimalApplication-0.3.0

运行find来看看有哪些文件:

$ find . -typef

./build.sc

./app/test/src/ExampleTests.scala

./app/src/MinimalApplication.scala

./mill

我们感兴趣的大部分代码都位于app/src/MinimalApplication.scala中。

package app

object MinimalApplication extends cask.MainRoutes{

@cask.get("/")

defhello= {

"Hello World!"

}

@cask.post("/do-thing")

defdoThing(request:cask.Request)= {

new String(request.readAllBytes).reverse

}

initialize

}

用build.sc进行构建:

import mill._, scalalib._

object app extends ScalaModule{

defscalaVersion= "2.13.0"

defivyDeps= Agg(

ivy"com.lihaoyi::cask:0.3.0"

)

object test extends Tests{

deftestFrameworks= Seq("utest.runner.Framework")

defivyDeps= Agg(

ivy"com.lihaoyi::utest::0.7.1",

ivy"com.lihaoyi::requests::0.2.0",

)

}

}

如果你使用Intellij,那么可以运行如下命令来设置Intellij项目配置:

$ ./mill mill.scalalib.GenIdea/idea

现在你可以在Intellij中打开minimalApplication-0.3.0/目录,查看项目的目录,也可以进行编辑。

可以利用Mill构建工具运行该程序,只需执行./mill:

$ ./mill -w app.runBackground

该命令将在后台运行Cask Web服务器,同时监视文件系统,如果文件发生了变化,则重启服务器。然后我们可以使用浏览器浏览服务器,默认网址是localhost:8080:

在/do-thing上还有个POST端点,可以在另一个终端上使用curl来访问:

$ curl -X POST --data hello http://localhost:8080/do-thing

olleh

可见,它接受数据hello,然后将反转的字符串返回给客户端。

然后可以运行app/test/src/ExampleTests.scala中的自动化测试:

$ ./mill clean app.runBackground # stop the webserver running in the background

$ ./mill app.test

[50/56] app.test.compile

[info] Compiling 1 Scala sourceto /Users/lihaoyi/test/minimalApplication-0.3.0/out/app/test/compile/dest/classes ...

[info] Done compiling.

[56/56] app.test.test

-------------------------------- Running Tests --------------------------------

+ app.ExampleTests.MinimalApplication 629ms

现在基本的东西已经运行起来了,我们来重新运行Web服务器:

$ ./mill -w app.runBackground

然后开始实现我们的聊天网站!