Spring RESTful

什麼是rest?

什麼是rest?當我看到這個詞的時候,我也不知道,我還以爲是休息,最後查了一下,做web開發必須要知道rest 
好了,就來簡單介紹一下rest 
rest即Representational State Transfer,表現層狀態轉化

互聯網上資源(是服務)細化理解爲一個url,如果訪問某個資源通過http url訪問。

我們把”資源”具體呈現出來的形式,叫做它的”表現層”(Representation)

表現層對用戶展示的形式:html、json、xml、pdf、圖片。。 
由於http協議的限制,服務器和客戶端不能實現主動通信,只能有客戶端發起請求服務端響應請求,也就是將請求方法和參數都包含url, 
使用rest和不使用rest的規則都是這樣做的,但是rest對於url做了很好的規劃,這個規則將方法和資源分開看起來做的很簡單,但是卻使我們更好理解了,上網無非就是對於網絡資源的操作,網絡資源在internet中直白點說就是url(個人理解)所以如果客戶端想要操作服務器,必須通過某種手段,讓服務器端發生”狀態轉化”(State Transfer)。而這種轉化是建立在表現層之上的,所以就是”表現層狀態轉化”。

GET用來獲取資源,POST用來新建資源(也可以用於更新資源),PUT用來更新資源,DELETE用來刪除資源 

RESTful就是對http最全面最好的詮釋,RESTful就是進行互聯網開發的理念、思想。

RESTful開發中url的規範:

1、url規範

原始url:http://www……/queryItems.action?type=101&id=111… 
規範後:http://wwww…/item/101/1 
比如: 
對商品查詢 
url:http://wwww…/item/101/1 表示對101分類 下的1號商品查詢 
http請求方法設置爲get 
比如: 
對商品刪除 
url:http://wwww…/item/101/1表示對101分類 下的1號商品刪除 
http請求方法設置爲delete

rest向客戶端發送數據

在請求時指定服務端給客戶端響應的內容類型是什麼? 
實現:在請求時設置http頭中Accept 
對商品查詢,以json格式展示: 
rest設置: 
url爲:http://wwww…/item/101/1 
客戶端請求此url並且設置Accept爲”applicatoin/json”

服務端處理方法: 
接收請求,解析Accept,根據指定類型返回不同的內容格式。 
如果解析到Accept爲”applicatoin/json”,服務端就將內容轉成json輸出

如果解析到Accept爲”applicatoin/xml”,服務端就將內容轉成xml輸出

RESTful架構的特點:

綜合上面的解釋,我們總結一下什麼是RESTful架構: 
  (1)每一個URI代表一種資源; 
實現: 
規範後的url規範後:http://wwww…/item/101/1,特點是參數通過url傳遞。 
  (2)客戶端和服務器之間,傳遞這種資源的某種表現層; 
實現: 
服務端解析Accept,根據客戶端的要求將內容進行輸出。

  (3)客戶端通過四個HTTP動詞,對服務器端資源進行操作,實現”表現層狀態轉化”。 
實現: 
服務解析客戶端請求的http方法,根據不同的方法執行不同的service操作。

rest在spingmvc中實際操作

1.首先在web.xml中配置支持rest風格的前端控制器,即過濾所有路徑

<!-- 配置springmvc的rest風格的url解析, -->
    <servlet>
    <servlet-name>springmvc-rest</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 初始參數 -->
    <init-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:spring/springmvc.xml</param-value>
    </init-param>
    </servlet>



    <servlet-mapping>
    <servlet-name>springmvc-rest</servlet-name>
<!--    注意這個是重點 -->
    <url-pattern>/</url-pattern>
    </servlet-mapping>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

編寫支持rest的controler方法,使用註解完成,簡單:

package com.leige.controler;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.leige.domain.Student;
import com.leige.service.StudentService;

@Controller
@RequestMapping("/rest")
public class RestControler {
    //注入service
    @Autowired
    @Qualifier(value="studentService")
    StudentService studentService;
    /**
     * @param sid
     * @return返回json
     * 
     * 
     * @PathVariable將url中的路作爲參數賦給方法
     * ,注意路徑使用佔位符
     */
    @RequestMapping(value="/testRest/{sid}")
    public @ResponseBody Student testRest(@PathVariable("sid")Integer sid){

        return studentService.selectStudent(sid);

    }; 
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35

測試結果:

這裏寫圖片描述 
重要的是理解rest的設計思想,rest的思想講解:http://www.ruanyifeng.com/blog/2014/05/restful_api.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章