简单易懂的现代魔法——Play Framework攻略4
接前文:简单易懂的现代魔法——Play Framework攻略3
1.The Object
时隔2个多月,Play Framework系列又更新了,本次的主题是:利用Play Framework实现Rest风格的Web Service。
[1]利用Play!实现Rest风格的Web服务,该Web服务的功能是登录验证。
[2]在客户端调用该Web服务,判断Web服务是否可用。(测试)
>>>
2. Web Service
什么是Web Service!这又是一个很复杂的问题,这里我就不拿学术论文来探讨这个问题了。这里就提几个关键词好了:SOAP,SOA,WSDL,RPC,XML,JSON。至于学术上讨论的Web Service大家可以自行百度学习下:Web Service
简单理解Web服务,就是一个跨语言和平台的服务接口,比如我们熟悉的天气预报接口,百度地图接口,微博接口等都属于Web Service。这些远程Web API,大多采用Web Service技术实现。
那么,什么是Restful Web Service呢!?
近几年来,Restful Web Service方兴未艾,大有赶超SOAP之势。传统的Web Service大多基于SOAP协议,在编写Web服务过程中,大量的配置文件定义和复杂的安全控制使得这类Web Service越来越重量级;近几年来随着移动应用的兴起,越来越多的轻量级框架开始逐渐展露头角,比如Ruby中的Sinatra,Python中的Flask,Node.js中的Express等等。这些轻量级框架和移动应用的轻量级需求相适应,因而得到快速流行。
而Restful Web Service则是Web服务轻量化的体现。Rest风格的Web服务并不是一个协议,只是一种编程风格。Restful的基本思想是基于资源的架构。Restful Web Service使得访问Web服务像访问Web网站一样平滑。它的最突出特点是提供POST,GET,Delete等方式访问Web服务,把所有的服务看作是一种资源,对于资源,可以简单的进行CRUD操作。
>>>
3.基于Play Framework的服务器端开发
理论讲了这么多,是在是难以理解,下面实战演示一下。服务器端要实现的业务流程是:
[1]提供一个登录接口,用户可以输入用户名和密码
[2]服务器接受用户提交的数据
[3]服务器对比用户名和密码是否正确(通常需要访问数据库,本次我们固定密码在程序中)
[4]服务器返回登录是否成功的JSON信息给客户端
服务器端的开发是在简单的不行,我们打开上次建立的工程(简单易懂的现代魔法——Play Framework攻略3)
[1]打开工程
由于业务逻辑和上次基本一样,只是服务器不再跳转网页,而是返回JSON信息,因此我们继续使用上次的工程进行修改即可。
[2]删除post.scala.html文件
在app/views中删除post.scala.html文件。由于我们不再需要跳转网页,因此该视图可以直接删除。
[3]修改controller中的loginPost Action
修改app/controllers/Application.java文件的Application类的loginPost()方法,代码如下:
public Result loginPost()
{
DynamicForm requestData = Form.form().bindFromRequest();
String username = requestData.get("username");
String password = requestData.get("password"); ObjectNode result = Json.newObject();
if(username.equals("kirigiri") && password.equals("123456"))
{
result.put("result","登录成功");
return ok(result);
}
else
{
result.put("result","用户名或密码错误,请重新登录");
return ok(result);
}
}
loginPost
关键点在于建立了一个JSON对象result,然后在result对象中写入信息。最后直接将这个JSON对象返回给客户端即可。
[4]终端运行服务器
KirigirideMacBook-Air:loginService Kirigiri$ activator run
[5]输入网址进行测试:
http://10.110.2.115:9000/login,输入用户名和密码后,成功返回JSON数据。
至此,服务器端开发完成,我们只修改了几行代码,就把Web程序改写为了服务器端程序,可见Rest风格的Web服务是多么的强大。
>>>
4.客户端测试例子
既然有了Web Service,那么我们就可以在移动客户端实现登录啦!至于客户端具体怎么开发,我会在下一篇文章详述,这里我就展示一个用Swift写的客户端例子吧。
[1]新建iOS程序
[2]修改ViewController.swift代码
(3)在func viewDidLoad()中写入下列代码:
override func viewDidLoad() {
super.viewDidLoad() var bodyData = "username=kirigiri&password=123456" var url = NSURL(string: "http://10.110.2.115:9000/login")
var request = NSMutableURLRequest(URL: url!) request.HTTPMethod = "POST"
request.HTTPBody = bodyData.dataUsingEncoding(NSUTF8StringEncoding); let task = NSURLSession.sharedSession().dataTaskWithRequest(request) {
data, response, error in if error != nil
{
println("error=\(error)")
return
} println("response = \(response)") let responseString = NSString(data: data, encoding: NSUTF8StringEncoding)
println("responseString = \(responseString)") var err: NSError?
var myJSON = NSJSONSerialization.JSONObjectWithData(data, options: .MutableLeaves, error:&err) as? NSDictionary if let parseJSON = myJSON {
var result = parseJSON["result"] as? String
println("result: \(result)")
}
}
task.resume()
}
Swift code
(4)点击Run开始运行程序
我们在客户端成功得到了返回的JSON信息!
至此,测试成功。由于我对iOS开发完全不熟悉,所以还不能利用得到的JSON数据进行iOS UI的开发和页面跳转。下次我会利用windows程序展示一个利用Web Service实现客户端登录的例子。
简单易懂的现代魔法——Play Framework攻略4的更多相关文章
- 简单易懂的现代魔法——Play Framework攻略1
哇哈哈,寒假结束啦,于是我又开新坑了....这次的主角可是大名鼎鼎的Play Framework!!那么闲话少说,开始攻略吧! 1.什么是Play Framework? 大名鼎鼎的play frame ...
- 简单易懂的现代魔法——Play Framework攻略3
接前文:http://www.cnblogs.com/Kassadin/p/4343682.html 目前为止,我们已经研究了Play Framework的体系结构以及Web应用程序的工作原理.本来今 ...
- 简单易懂的现代魔法——Play Framework攻略2
接前文:http://www.cnblogs.com/Kassadin/p/4335908.html 上次讲到Play Framework开发环境的配置,以及第一个Hello World程序:本次主要 ...
- linux内核升级图文攻略(转)
一.Linux内核概览Linux是一个一体化内核(monolithic kernel)系统.设备驱动程序可以完全访问硬件.Linux内的设备驱动程序可以方便地以模块化(modularize)的形式设置 ...
- Moon.Orm3.8技术全攻略
Moon.ORM技术全攻略 一.绪论 本文主要是针对Moon.ORM的技术的讨论及其使用使用指导.如有其它疑问,请留言.本文主要针对Moon.ORM3.9版本,同时将会对4.0做一个技术预览.本文从 ...
- linux内核升级图文攻略
Linux内核概览 Linux是一个一体化内核(monolithic kernel)系统. 设备驱动程序可以完全访问硬件. Linux内的设备驱动程序可以方便地以模块化(modularize)的形式设 ...
- 圣魔大战3(Castle Fantisia)艾伦希亚战记完美攻略
作为城堡幻想曲系列续作,艾伦希亚战记继承了前作的战棋+养成模式进行游戏. (城堡幻想曲3,纠正大家个错误哦,不是圣魔大战3,圣魔大战是城堡幻想曲2,圣魔大战不是个系列,艾伦西亚战记==艾伦希亚战记,一 ...
- 视频聊天插件:AnyChat使用攻略之iOS开发指南
AnyChat使用攻略之iOS开发指南 这套攻略主要指导刚开始使用AnyChat SDK For iOS的同学,快速搭建SDK环境,和实现音视频开发流程. (需要工程案例文件可联系我们) 在iOS平台 ...
- php连接微软MSSQL(sql server)完全攻略
http://www.jb51.net/article/98364.htm php连接微软MSSQL(sql server)完全攻略 作者:吵吵 字体:[增加 减小] 类型:转载 时间:2016-11 ...
随机推荐
- Ubuntu下第一个C程序的成功运行
对于每个新手来说,进入Ubuntu最想做的事莫过于在终端(Terminal)里运行自己的第一个C/C++程序"hello.c/hello.cpp"了. 很多语言书籍都是默认搭载好运 ...
- ASP.NET MVC 2 验证
来源:http://www.cnblogs.com/jhxk/articles/2612885.html 只为把自己觉的好的存起来 对用户输入的验证以及强制业务规则/逻辑是大多数web应用的核心需求 ...
- [大牛翻译系列]Hadoop 翻译文章索引
原书章节 原书章节题目 翻译文章序号 翻译文章题目 链接 4.1 Joining Hadoop(1) MapReduce 连接:重分区连接(Repartition join) http://www.c ...
- 关于angularJS与jquery在使用上的一些感悟
最近做的项目中,有同时用到angularJS与jquery两种JS框架. 在使用过程中发现,angularJS的用法更像是面向对象的编程模式.它会要求你定义一个view model,然后所有的页面变化 ...
- python学习第三天第一部分
字典 1.字典的定义和规则: 定义:{key1:value1,key2:value2} key 的定义规则:1.必须是不可变的(数字.字符串.元组):2.必须是唯一的, value的定义规则:任意类型 ...
- cadence 16.6 Pspice 仿真步骤
从ADI官网下载后缀为 cir 的文件,AD8210 为例 进行仿真 1 打开 Cadence -> Release 16.6 -> PSpice Accessories -> Mo ...
- 【转载】MySQL 5.6主从Slave_IO_Running:Connecting/error connecting to master *- retry
原文地址:MySQL 5.6主从Slave_IO_Running:Connecting/error connecting to master *- retry 作者:忆雨林枫 刚配置的MySQL主从, ...
- ubuntu 12.04版本出现界面终端打开broken pipe,但是tty1这些可以。
sudo apt-get remove xserver-xorg sudo apt-get install xserver-xorg
- Cookie 获取
二级域名可以获取一级域名的Cookie值 二级域名下删除顶级域名下的Cookie,需要添加顶级域名的Cookie作用域 /// <summary> /// 根据cookie名称删除 /// ...
- textview点击后selector的pressed无效果
原因: 需要配置 android:clickable="true" 这个跟开发环境有关,我之前用的android studio 就不需要这一项,默认可以点击. ********* ...