Playframework(18)RESTFul and Testing/Logging

Playframework(18)RESTFul and Testing/Logging

Finally, I decide to use Specs2 to test all my things. I may need to read more detail if I use this.

Testing the Controller
package controllers

import play.api.libs.json._
import play.api.mvc._
import models.Book

trait BookController {

this: Controller =>

def listBooks = Action {
Ok(Json.toJson(Book.books))
}

def saveBook = Action(BodyParsers.parse.json) { request =>
val b = request.body.validate[Book]
b.fold(
errors => {
BadRequest(Json.obj("status" -> "OK", "message" -> JsError.toFlatJson(errors)))
},
book => {
Book.addBook(book)
Ok(Json.obj("status" -> "OK"))
}
)
}

def getBook(id:String) = Action {
Book.getBook(id) match {
case Some(b) => Ok(Json.toJson(b))
case _ => Ok(Json.obj("status" -> "OK", "message" -> "Book Not Found!"))
}
}

def deleteBook(id:String) = Action {
Book.deleteBook(id)
Ok(Json.obj("status" -> "OK"))
}

def updateBook(id:String) = Action(BodyParsers.parse.json){ request =>
val b = request.body.validate[Book]
b.fold(
errors => {
BadRequest(Json.obj("status" -> "OK", "message" -> JsError.toFlatJson(errors)))
},
book => {
book.id = Some(id)
Book.updateBook(book)
Ok(Json.obj("status" -> "OK"))
}
)
}

}

object BookController extends Controller with BookController

package controllers

import play.api.libs.json.JsValue
import play.api.mvc._
import play.api.test._
import scala.concurrent.Future

/**
* Created by carl on 9/9/15.
*/
class BookControllerSpec extends PlaySpecification with Results{

class TestController() extends Controller with BookController

"Book API#listBooks" should {
"size should be 2" in {
val controller = new TestController
val result: Future[Result] = controller.listBooks.apply(FakeRequest())
val bodyText: JsValue = contentAsJson(result)
bodyText must not be null
}
}

}

This command will do the work
> sbt "testOnly models.*"

References:
https://github.com/faubertin/scala-play-rest-example

https://www.playframework.com/documentation/2.4.x/ScalaHome
https://www.playframework.com/documentation/2.4.x/ScalaTestingWithSpecs2

https://www.playframework.com/documentation/2.4.x/ScalaFunctionalTestingWithSpecs2
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Restful: Restful是一种软件架构风格,用于构建可伸缩的网络应用程序。它基于HTTP协议,通过使用统一的接口和资源标识符(URI)来进行通信。Restful架构的核心原则是无状态、可缓存、客户端-服务器分离和统一接口。它使用HTTP方法(GET、POST、PUT、DELETE等)来操作资源,并使用JSON或XML等格式来传输数据。 GraphQL: GraphQL是一种用于API开发的查询语言和运行时环境。它提供了一种灵活的方式来定义和查询数据模型,使客户端能够精确地获取所需的数据,避免了过度获取或不足获取的问题。GraphQL使用类型系统来描述数据模型,并通过查询语言来定义客户端请求的数据结构。与传统的RESTful API相比,GraphQL具有更高的灵活性和效率。 Soap: SOAP(Simple Object Access Protocol)是一种基于XML的通信协议,用于在网络上交换结构化信息。它定义了一种标准的消息格式和通信规范,使得不同平台和编程语言之间可以进行远程调用和消息传递。SOAP通常使用HTTP作为传输协议,但也可以使用其他协议如SMTP、FTP等。 Dubbo: Dubbo是一个高性能的分布式服务框架,用于构建大规模分布式系统。它提供了服务注册、发现、调用和负载均衡等功能,使得分布式系统的开发和管理更加简单。Dubbo支持多种通信协议和序列化方式,并提供了可扩展的插件机制,可以与其他框架和中间件进行集成。 RPC(Remote Procedure Call): RPC是一种远程过程调用协议,用于实现分布式系统中的进程间通信。它允许一个进程调用另一个进程的函数或方法,就像调用本地函数一样。RPC隐藏了底层通信细节,使得分布式系统的开发更加简单。常见的RPC框架有gRPC、Thrift、Apache Avro等。 WebSocket: WebSocket是一种在单个TCP连接上进行全双工通信的协议。它提供了实时的、双向的数据传输能力,使得服务器可以主动向客户端推送数据,而不需要客户端发起请求。WebSocket通常用于实时聊天、实时数据更新等场景,与传统的HTTP请求-响应模式相比,具有更低的延迟和更高的效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值