注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

阿弥陀佛

街树飘影未见尘 潭月潜水了无声 般若观照心空静...

 
 
 

日志

 
 
关于我

一直从事气象预报、服务建模实践应用。 注重气象物理场、实况场、地理信息、本体知识库、分布式气象内容管理系统建立。 对Barnes客观分析, 小波,计算神经网络、信任传播、贝叶斯推理、专家系统、网络本体语言有一定体会。 一直使用Java、Delphi、Prolog、SQL编程。

网易考拉推荐

Spray Learning PPT  

2014-12-12 18:14:15|  分类: spray |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
Spray Learning PPT

Building RESTful service

Building REST Service with Scala


0. http 提供的主要服務

POST /customer/ to create Customer.
GET /customer/<id>/ to retrieve specific Customer.
PUT /customer/<id>/ to update specific Customer.
DELETE /customer/<id>/ to delete specific Customer.
GET /customer/ to search for Customers with specific parameters.
1. spray概念

spray = 用于构造RESTful Web服务的软件库套件.

原则: 轻量级,无阻塞,基于actor,模块化,可测试

思想: 库, 非框架

2.组件

富immutable HTTP 模型

spray-server: DSL for server-side API construction

spray-client: complementary HTTP client

spray-can: low-level HTTP server and client

spary-json: straight JSON in scala

3 spray-server

Run on servlet containers or spary-can

Tool for building a "self-contained" API layer

中心要素: Routing DSL for defining web API behavior

焦点: RESTful web API

4.基本架构:

Spray Learning PPT - 险峰 - 阿弥陀佛
5. API层职责
以method,path,query参数,entity为基础, 形成Request routing
(Un)marshalling to / from domain objects
Encoding / decoding
Authentication / authorization
Cashing and serving static content
RESTful error handling
5.1 Route 举例:
Spray Learning PPT - 险峰 - 阿弥陀佛

Spray Learning PPT - 险峰 - 阿弥陀佛
最简单的route:
ctx => ctx.complete("Say hello to spary")
或:
_.complete("Say hello to spary")

或使用 "directive"
completeWith(("Say hello to spary")
def completeWith[T:Marshaller](value:=> T):Route = _.complete(value)

Spray Learning PPT - 险峰 - 阿弥陀佛

path  ------ directive name
"order" / HexIntNumber ---- args
id =>  extractions
其余: 从get 到 put为inner route
~  --------- route concatenation: recover from rejections
要点 : Route 形成了一棵树结构
可以继续使用 | 运算符压缩:
Spray Learning PPT - 险峰 - 阿弥陀佛
并抽取出一个定制的directive:
Spray Learning PPT - 险峰 - 阿弥陀佛
使用 & 运算符 可以表述的清晰一些:
Spray Learning PPT - 险峰 - 阿弥陀佛
进一步抽取:
Spray Learning PPT - 险峰 - 阿弥陀佛
这样的好处是:
Operators 是 type-safe:
val orderPath=path("order" / IntNumber) -------编译时完成
Spray Learning PPT - 险峰 - 阿弥陀佛
在Spray中已经预定义了许许多多的Directives,
http://spray.io/documentation/1.2-M8/spray-routing/predefined-directives-alphabetically/
5.2 技术要点
---- 确保route 结构干净,可读. 将所有逻辑操作,抽取为定制的directive
---- 不要将API层泄漏到应用中
----使用数据编出(unmarshaling), 整理(marshalling) 基础架构(infrastructure)
----块分离
  评论这张
 
阅读(327)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017