RESTFul


REST介紹

REST(Representational State Transfer表述性狀態轉移)是一種針對網絡應用的設計和開發方式,可以降低開發的復雜性,提高系統的可伸縮性。REST提出了一些設計概念和准則:

1、網絡上的所有事物都被抽象為資源(resource);

2、每個資源對應一個唯一的資源標識(resource identifier);

3、通過通用的連接器接口(generic connector interface)對資源進行操作;

4、對資源的各種操作不會改變資源標識;

5、所有的操作都是無狀態的(stateless)。

需要注意的是,REST是設計風格而不是標准。REST通常基於使用HTTP,URI,和XML以及HTML這些現有的廣泛流行的協議和標准。

傳統的請求模式和REST模式的請求模式區別:

作用 傳統模式 REST模式
列舉出所有的用戶 GET /users/list GET /users
列出ID為1的用戶信息 GET /users/show/id/1 GET /users/1
插入一個新的用戶 POST /users/add POST /users
更新ID為1的用戶信息 POST /users/mdy/id/1 PUT /users/1
刪除ID為1的用戶 POST /users/delete/id/1 DELETE /users/1

關於更多的REST信息,可以參考:http://zh.wikipedia.org/wiki/REST

RESTFul支持

3.2的RESTFul支持更為靈活,你只需要把控制器繼承Think\Controller\RestController即可。 繼承RestController控制器后你的訪問控制器就可以支持下面的一些功能:

  • 支持資源類型自動檢測;
  • 支持請求類型自動檢測;
  • RESTFul方法支持;
  • 可以設置允許的請求類型列表;
  • 可以設置允許請求和輸出的資源類型;
  • 可以設置默認請求類型和默認資源類型;

    REST參數

    繼承了RestController后,你可以在你的控制器里面設置rest相關的屬性參數,包括:allowMethod,defaultMethod,allowType,defaultType以及allowOutputType。

    屬性名 說明 默認值
    allowMethod REST允許的請求類型列表 array('get','post','put','delete')
    defaultMethod REST默認請求類型 get
    allowType REST允許請求的資源類型列表 array('html','xml','json','rss')
    defaultType REST默認的資源類型 html
    allowOutputType REST允許輸出的資源類型列表 array( 'xml' => 'application/xml', 'json' => 'application/json','html' => 'text/html',)

    一.首先,什么是REST?
     REST從字面上講叫做Representational State Transfer,翻譯成表現層狀態轉移,但是一般在翻譯的時候,前面會加一個Resource,即Resource Representational State Transfer,即為資源表現層狀態轉移.用人話講就是:客戶端通過HTTP請求,對服務器端的資源進行操作,實現"表現層(使用HTTP動詞去促使服務器端資源的)狀態發生改變".

    二. 什么是RESTful?
     RESTful是代表REST化,或者說設計遵從REST架構的,所以要了解RESTful就需要了解REST.

    三.我們為什么要使用RESTful的風格來開發接口?

    先從傳統設計接口的方式來看:

    新增一個員工:http://www.demo.cn/finance/employee/createEmp

     刪除一個員工:http://www.demo.cn/finance/employee/deleteEmp

    修改一個員工:http://www.demo.cn/finance/employee/updateEmp

    獲取員工列表:http://www.demo.cn/finance/employee/listEmp

    現在我們發現:一個非常簡單的需求產生的問題:

     1.每一個操作,都需要一個獨立的url去操作,因為我們對員工的動作都需要反映在url里面.

     2.會產生大量的url,非常不方便接口的維護和文檔的維護

     3.如果有不同的響應方式,我們可能需要額外的參數,甚至不同的url來描述

     4.請求參數包含在請求地址中,無法針對性做緩存

    如果我們使用RESTful風格的接口,那么我們可以如下做:

     新增一個員工:POST http://www.demo.cn/finance/employee

      刪除一個員工:DELETE http://www.demo.cn/finance/employee

     修改一個員工:PATCH http://www.demo.cn/finance/employee

    獲取員工列表:GET http://www.demo.cn/finance/employee

    可以發現,我們通過HTTP的請求方式來給予這些請求的不同含義,動作設計和示例如下: 

    下面是一個簡單的實踐,我們可以使用去哪兒網開源的YApi來幫助我們管理接口並測試:

     


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM