簡單易懂的現代魔法——Play Framework攻略4

接前文:簡單易懂的現代魔法——Play Framework攻略3html

1.The Objectjava


 時隔2個多月,Play Framework系列又更新了,本次的主題是:利用Play Framework實現Rest風格的Web Service。數據庫

[1]利用Play!實現Rest風格的Web服務,該Web服務的功能是登陸驗證。編程

[2]在客戶端調用該Web服務,判斷Web服務是否可用。(測試)swift

>>>windows

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等等。這些輕量級框架和移動應用的輕量級需求相適應,於是獲得快速流行。app

而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()方法,代碼以下:

 1 public Result loginPost()
 2 {
 3         DynamicForm requestData = Form.form().bindFromRequest();
 4         String username = requestData.get("username");
 5         String password = requestData.get("password");
 6 
 7         ObjectNode result = Json.newObject();
 8         if(username.equals("kirigiri") && password.equals("123456"))
 9         {
10             result.put("result","登陸成功");
11             return ok(result);
12         }
13         else
14         {
15             result.put("result","用戶名或密碼錯誤,請從新登陸");
16             return ok(result);
17         }
18 }
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()中寫入下列代碼:

 1 override func viewDidLoad() {
 2         super.viewDidLoad()
 3    
 4         var bodyData = "username=kirigiri&password=123456"
 5         
 6         var url = NSURL(string: "http://10.110.2.115:9000/login")
 7         var request = NSMutableURLRequest(URL: url!)
 8         
 9         request.HTTPMethod = "POST"
10         request.HTTPBody = bodyData.dataUsingEncoding(NSUTF8StringEncoding);
11         
12         let task = NSURLSession.sharedSession().dataTaskWithRequest(request) {
13             data, response, error in
14             
15             if error != nil
16             {
17                 println("error=\(error)")
18                 return
19             }
20             
21             println("response = \(response)")
22             
23             let responseString = NSString(data: data, encoding: NSUTF8StringEncoding)
24             println("responseString = \(responseString)")
25             
26             var err: NSError?
27             var myJSON = NSJSONSerialization.JSONObjectWithData(data, options: .MutableLeaves, error:&err) as? NSDictionary
28             
29             if let parseJSON = myJSON {
30                 var result = parseJSON["result"] as? String
31                 println("result: \(result)")
32             }
33         }
34         task.resume()
35     }
Swift code

(4)點擊Run開始運行程序

咱們在客戶端成功獲得了返回的JSON信息!

至此,測試成功。因爲我對iOS開發徹底不熟悉,因此還不能利用獲得的JSON數據進行iOS UI的開發和頁面跳轉。下次我會利用windows程序展現一個利用Web Service實現客戶端登陸的例子。

相關文章
相關標籤/搜索