RESTful風格化

RESTful Web Service介紹

Roy Thomas Fielding博士2000年提出的java

REST是英文Representationalweb

State Transfer的縮寫json

表象化狀態轉變 或者 表述性狀態轉移瀏覽器

REST是Web服務的一種架構風格安全

使用HTTP、URI等普遍流行的標準和協議服務器

輕量級、跨平臺、跨語言的架構設計。網絡

img

REST究竟是什麼?

REST是一種設計風格。它不是一種標準,也不是一種軟件,而是一種思想。架構

REST一般基於使用HTTP,URI,和XML,JSON以及HTML這些現有的普遍流行的協議和標準。app

RESTful是什麼

RESTful對應的中文是 REST式的。less

RESTful Web Service是一種常見的REST的應用,是遵照了REST風格的web服務。

兩種主要的web服務

JAX-RS

RESTful Web Service

JAX-WS Web Service

REST 架構的主要原則

網絡上的全部事物均可被抽象爲資源(Resource)

每一個資源都有一個惟一的資源標識符(Resource

Identifier)

同一資源具備多種表現形式(xml、json等)

對資源的各類操做不會改變資源標識符

全部的操做都是無狀態的(Stateless)

符合REST原則的架構方式便可稱爲RESTful

無狀態性

無狀態性使得客戶端和服務器端沒必要保存對方的詳細信息,服務器只須要處理當前

Request,而沒必要了解前面

Request 的歷史。

從而能夠更容易地釋放資源。

讓服務器充分利用

Pool 技術來提升穩定性和性能。

資源操做

http://taotao.com/item/

GET: 獲取一個資源

POST: 建立一個新的資源

PUT: 修改一個資源的狀態

DELETE :刪除一個資源

資源展示

XML

JSON

……

原來的方式

http://127.0.0.1/user/queryUser/{id} GET方法,根據用戶id****獲取數據

http://127.0.0.1/user/updateUser POST****方法,用戶修改

http://127.0.0.1/user/saveUser POST****方法,用戶新增

http://127.0.0.1/user/deleteUser/{id} GET/POST方法,用戶根據id****刪除

RESTful

[http://127.0.0.1/user/](http://127.0.0.1/user/ {id})[ {id}](http://127.0.0.1/user/ {id}) GET方法,根據用戶id****獲取數據

http://127.0.0.1/user/ PUT****方法,用戶修改

http://127.0.0.1/user/ POST****方法,用戶新增

http://127.0.0.1/user/{id} DELETE方法,用戶根據id****刪除

開發的接口,web服務更加的簡潔

REST接口定義

img

冪等性:對同一REST接口的屢次訪問,獲得的資源狀態是相同的。

安全性:對該REST接口訪問,不會使服務器端資源狀態發生改變。

最佳實踐

最佳實踐:REST接口設計

• URL的組成

– 網絡協議(http、https)

– 服務器地址

– 接口名稱

– 參數列表

• URL定義限定

– 不要使用大寫字母

– 使用中線 - 代替下劃線 _

– 參數列表應該被encode過

最佳實踐:響應設計

Content body 僅僅用來傳輸數據

數據要作到拿來就可用的原則,不須要「拆箱」的過程

用來描述數據或者請求的元數據放Header中

img

img

http響應狀態碼

img

SpringMVC實現RESTful服務

SpringMVC原生態的支持了REST風格的架構設計。

所涉及到的註解:

@RequestMapping

@PathVariable

@ResponseBody

ResponseEntity

……

RESTful風格開發商品接口

根據RESTful風格,編寫商品功能的增刪改查接口

編寫商品查詢接口

在ItemInterfaceController編寫

@Controller
@RequestMapping("item/interface")
public class
ItemInterfaceController {

    @Autowired
    private ItemService itemService;

    // http://manager.taotao.com/rest/item/interface/{id}
    /** * 根據id查詢用戶 * * @param id * @return 返回的類型是ResponseEntity,泛型聲明爲須要返回的數據類型 */
    @RequestMapping(value = "{id}", method =
RequestMethod.GET) 
// 返回的是ResponseEntity或者加上@ResponseBody註解的效果是同樣的,任選其一便可,也能夠都設置。
// @ResponseBody
    public
ResponseEntity<Item> queryItemById(@PathVariable("id") Long id) {
       try {
           Item item = this.itemService.queryById(id);
           // 查詢成功,響應的狀態碼應爲200
           // 能夠設置HttpStatus枚舉的OK
           // return
ResponseEntity.status(HttpStatus.OK).body(Item);
           // 也可使用ok()方法,效果和上面是同樣的
           return
ResponseEntity.ok().body(item);
       } catch (Exception e) {
           // TODO Auto-generated catch block
           e.printStackTrace();
       }
       // 若是有異常,設置狀態碼爲500
       return
ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(null);
    }
}

使用谷歌瀏覽器測試工具測試

img

img

相關文章
相關標籤/搜索