- 浏览: 2542974 次
- 性别:
- 来自: 成都
文章分类
最新评论
-
nation:
你好,在部署Mesos+Spark的运行环境时,出现一个现象, ...
Spark(4)Deal with Mesos -
sillycat:
AMAZON Relatedhttps://www.godad ...
AMAZON API Gateway(2)Client Side SSL with NGINX -
sillycat:
sudo usermod -aG docker ec2-use ...
Docker and VirtualBox(1)Set up Shared Disk for Virtual Box -
sillycat:
Every Half an Hour30 * * * * /u ...
Build Home NAS(3)Data Redundancy -
sillycat:
3 List the Cron Job I Have>c ...
Build Home NAS(3)Data Redundancy
Spray(7)REST API Project - Routing
5. How to deal with routing
First start class Boot.scala
package com.sillycat.easysprayrestserver
import spray.can.server.SprayCanHttpServerApp
import akka.actor.Props
import com.sillycat.easysprayrestserver.bootstrap.Bootstrap
import com.sillycat.easysprayrestserver.actor.URLRouterActor
object Boot extends App with Bootstrap with SprayCanHttpServerApp {
valhandler = system.actorOf(Props[URLRouterActor])
newHttpServer(handler) ! Bind(interface = serverAddress, port = serverPort)
}
Bootstrap.scala to prepare some parameters
package com.sillycat.easysprayrestserver.bootstrap
import akka.actor.ActorSystem
import com.typesafe.config.ConfigFactory
trait Bootstrap {
//implicit val system = ActorSystem("RESTAPIService")
valconfig = ConfigFactory.load()
valenv = config.getString("build.env")
varserverAddress: String = config.getString("server.address")
varserverPort: Int = config.getInt("server.port")
if (env != null && env != "") {
serverAddress = if (config.getString("environment." + env + ".server.address") != null) config.getString("environment." + env + ".server.address") elseserverAddress
serverPort = if (config.getInt("environment." + env + ".server.port") != 0) config.getInt("environment." + env + ".server.port") elseserverPort
}
}
URLRouterActor to manage the URL resources
package com.sillycat.easysprayrestserver.actor
import akka.actor.{ Props, Actor }
import spray.routing._
import spray.routing.directives._
import spray.util.LoggingContext
import spray.http.StatusCodes._
import spray.httpx.SprayJsonSupport._
import shapeless._
class URLRouterActor extends Actor with URLRouterService {
def actorRefFactory = context
def receive = runRoute(route)
}
trait URLRouterService extends HttpService {
def route = {
pathPrefix(Version / BrandCode) { (apiVersion, brandCode) =>
path("resource" / "all") {
get {
complete {
"Morning, guest. apiVersion = " + apiVersion + ", brandCode =" + brandCode
}
}
} ~
path("resource" / "admin-only") {
get {
complete {
"Morning, admin-only. apiVersion = " + apiVersion + ", brandCode =" + brandCode
}
}
} ~
path("resource" / "customer-only") {
get {
complete {
"Morning, customer-only. apiVersion = " + apiVersion + ", brandCode =" + brandCode
}
}
} ~
path("resource" / "better-admin") {
get {
complete {
"Morning, better-admin. apiVersion = " + apiVersion + ", brandCode =" + brandCode
}
}
} ~
path("resource" / "better-customer") {
get {
complete {
"Morning, better-customer. apiVersion = " + apiVersion + ", brandCode =" + brandCode
}
}
}
}
}
valVersion = PathMatcher("""v([0-9]+)""".r)
.flatMap {
casestring :: HNil => {
try Some(java.lang.Integer.parseInt(string) :: HNil)
catch {
case _: NumberFormatException => None
}
}
}
valBrandCode = PathElement
}
Visit the URL as follow to verify that.
http://localhost:9000/v1/sillycat/resource/better-customer
6. How to Deal with Auth
7. How to work with DB
come soon...
8. How to Work with Actor
come soon…
9. How to do Validation
come soon...
10. How to Work with Logback
come soon…
Tips:
1. Add formatter to plugins
project/plugins.sbt
addSbtPlugin("com.typesafe.sbt" % "sbt-scalariform" % "1.0.1")
References:
http://www.gtan.com/akka_doc/scala/routing.html
https://github.com/cakesolutions/spray-auth-example
http://spray.io/documentation/spray-routing/
https://github.com/spray/spray/wiki/Authentication-Authorization
https://github.com/spray/spray/wiki/Configuration
https://github.com/spray/spray/wiki
5. How to deal with routing
First start class Boot.scala
package com.sillycat.easysprayrestserver
import spray.can.server.SprayCanHttpServerApp
import akka.actor.Props
import com.sillycat.easysprayrestserver.bootstrap.Bootstrap
import com.sillycat.easysprayrestserver.actor.URLRouterActor
object Boot extends App with Bootstrap with SprayCanHttpServerApp {
valhandler = system.actorOf(Props[URLRouterActor])
newHttpServer(handler) ! Bind(interface = serverAddress, port = serverPort)
}
Bootstrap.scala to prepare some parameters
package com.sillycat.easysprayrestserver.bootstrap
import akka.actor.ActorSystem
import com.typesafe.config.ConfigFactory
trait Bootstrap {
//implicit val system = ActorSystem("RESTAPIService")
valconfig = ConfigFactory.load()
valenv = config.getString("build.env")
varserverAddress: String = config.getString("server.address")
varserverPort: Int = config.getInt("server.port")
if (env != null && env != "") {
serverAddress = if (config.getString("environment." + env + ".server.address") != null) config.getString("environment." + env + ".server.address") elseserverAddress
serverPort = if (config.getInt("environment." + env + ".server.port") != 0) config.getInt("environment." + env + ".server.port") elseserverPort
}
}
URLRouterActor to manage the URL resources
package com.sillycat.easysprayrestserver.actor
import akka.actor.{ Props, Actor }
import spray.routing._
import spray.routing.directives._
import spray.util.LoggingContext
import spray.http.StatusCodes._
import spray.httpx.SprayJsonSupport._
import shapeless._
class URLRouterActor extends Actor with URLRouterService {
def actorRefFactory = context
def receive = runRoute(route)
}
trait URLRouterService extends HttpService {
def route = {
pathPrefix(Version / BrandCode) { (apiVersion, brandCode) =>
path("resource" / "all") {
get {
complete {
"Morning, guest. apiVersion = " + apiVersion + ", brandCode =" + brandCode
}
}
} ~
path("resource" / "admin-only") {
get {
complete {
"Morning, admin-only. apiVersion = " + apiVersion + ", brandCode =" + brandCode
}
}
} ~
path("resource" / "customer-only") {
get {
complete {
"Morning, customer-only. apiVersion = " + apiVersion + ", brandCode =" + brandCode
}
}
} ~
path("resource" / "better-admin") {
get {
complete {
"Morning, better-admin. apiVersion = " + apiVersion + ", brandCode =" + brandCode
}
}
} ~
path("resource" / "better-customer") {
get {
complete {
"Morning, better-customer. apiVersion = " + apiVersion + ", brandCode =" + brandCode
}
}
}
}
}
valVersion = PathMatcher("""v([0-9]+)""".r)
.flatMap {
casestring :: HNil => {
try Some(java.lang.Integer.parseInt(string) :: HNil)
catch {
case _: NumberFormatException => None
}
}
}
valBrandCode = PathElement
}
Visit the URL as follow to verify that.
http://localhost:9000/v1/sillycat/resource/better-customer
6. How to Deal with Auth
7. How to work with DB
come soon...
8. How to Work with Actor
come soon…
9. How to do Validation
come soon...
10. How to Work with Logback
come soon…
Tips:
1. Add formatter to plugins
project/plugins.sbt
addSbtPlugin("com.typesafe.sbt" % "sbt-scalariform" % "1.0.1")
References:
http://www.gtan.com/akka_doc/scala/routing.html
https://github.com/cakesolutions/spray-auth-example
http://spray.io/documentation/spray-routing/
https://github.com/spray/spray/wiki/Authentication-Authorization
https://github.com/spray/spray/wiki/Configuration
https://github.com/spray/spray/wiki
发表评论
-
NodeJS12 and Zlib
2020-04-01 07:44 468NodeJS12 and Zlib It works as ... -
Traefik 2020(1)Introduction and Installation
2020-03-29 13:52 330Traefik 2020(1)Introduction and ... -
Private Registry 2020(1)No auth in registry Nginx AUTH for UI
2020-03-18 00:56 428Private Registry 2020(1)No auth ... -
Buffer in NodeJS 12 and NodeJS 8
2020-02-25 06:43 377Buffer in NodeJS 12 and NodeJS ... -
NodeJS ENV Similar to JENV and PyENV
2020-02-25 05:14 468NodeJS ENV Similar to JENV and ... -
Prometheus HA 2020(3)AlertManager Cluster
2020-02-24 01:47 414Prometheus HA 2020(3)AlertManag ... -
Serverless with NodeJS and TencentCloud 2020(5)CRON and Settings
2020-02-24 01:46 332Serverless with NodeJS and Tenc ... -
GraphQL 2019(3)Connect to MySQL
2020-02-24 01:48 243GraphQL 2019(3)Connect to MySQL ... -
GraphQL 2019(2)GraphQL and Deploy to Tencent Cloud
2020-02-24 01:48 445GraphQL 2019(2)GraphQL and Depl ... -
GraphQL 2019(1)Apollo Basic
2020-02-19 01:36 321GraphQL 2019(1)Apollo Basic Cl ... -
Serverless with NodeJS and TencentCloud 2020(4)Multiple Handlers and Running wit
2020-02-19 01:19 307Serverless with NodeJS and Tenc ... -
Serverless with NodeJS and TencentCloud 2020(3)Build Tree and Traverse Tree
2020-02-19 01:19 310Serverless with NodeJS and Tenc ... -
Serverless with NodeJS and TencentCloud 2020(2)Trigger SCF in SCF
2020-02-19 01:18 286Serverless with NodeJS and Tenc ... -
Serverless with NodeJS and TencentCloud 2020(1)Running with Component
2020-02-19 01:17 303Serverless with NodeJS and Tenc ... -
NodeJS MySQL Library and npmjs
2020-02-07 06:21 282NodeJS MySQL Library and npmjs ... -
Python Library 2019(1)requests and aiohttp
2019-12-18 01:12 257Python Library 2019(1)requests ... -
NodeJS Installation 2019
2019-10-20 02:57 565NodeJS Installation 2019 Insta ... -
Monitor Tool 2019(2)Monit on Multiple Instances and Email Alerts
2019-10-18 10:57 257Monitor Tool 2019(2)Monit on Mu ... -
Sqlite Database 2019(1)Sqlite3 Installation and Docker phpsqliteadmin
2019-09-05 11:24 362Sqlite Database 2019(1)Sqlite3 ... -
Supervisor 2019(2)Ubuntu and Multiple Services
2019-08-19 10:53 366Supervisor 2019(2)Ubuntu and Mu ...
相关推荐
AndroidAsync.zip,用于Android的异步套接字、HTTP(客户端 服务器)、WebSocket和socket.io库。基于nio,而不是threads.asynchronous socket、http(client server)和android的websocket库。基于nio,而不是线程。
spray-actor-per-request, 使用每个请求模型中的参与者的示例 Spray 应用程序 每个请求的 Spray这个项目提供了一个示例 Spray 应用程序,它使用每个请求模型中的参与者。为什么要为每个HTTP请求启动一个参与者?轻松...
"slick-pg_spray-json_2.10-0.5.2.2.zip"中的Slick-PG版本,结合了Scala的spray-json库,使得JSON数据可以无缝地在数据库和代码之间转换。spray-json是Scala的一个轻量级、快速且易于使用的JSON库,它可以方便地解析...
spray-template使得开发RESTful API和服务时,能够快速、灵活地生成动态HTML或其他文本格式的响应。 在spray-can中,spray-template扮演了重要的角色,它允许开发者使用简洁、可读性强的模板语言来构建HTTP响应的...
描述 "spray-cache-spymemcached.zip" 涉及的是一个针对 Spray 框架的缓存扩展,名为 SpyMemcached 后端。Spray 是一个基于 Scala 的高性能、轻量级的 HTTP 和 RESTful 服务构建工具,常用于构建异步、非阻塞的服务...
官方版本,亲测可用
官方版本,亲测可用
官方版本,亲测可用
官方版本,亲测可用
$ git clone git://github.com/spray/spray-template.git my-project 将目录更改为您的克隆: $ cd 我的项目 启动 SBT: $ sbt 编译一切并运行所有测试: 测试 启动应用程序: 重新开始 浏览到以查看 angular...
官方版本,亲测可用
官方版本,亲测可用
官方版本,亲测可用
官方版本,亲测可用
概要该项目解释了如何使用具有 CORS 支持的 Spray 实现 REST API假设我假设你有经验和你的工作环境准备好使用以下技术/框架: Akka、SBT、CORS、Spray、cURL、Scala、Git要求这篇文章面向那些有 Scala 工作经验并...
$ git clone https://github.com/Gneotux/pfc-spray.git my-project 将目录更改为您的克隆: $ cd my-project 3(可选)。 使用{DIRECTORY} /src/main/resources/schema.sql中的脚本在postgres中创建数据库,修改...