REST ,英文全稱是 Representational State Transfer ,翻譯成中文是“表述性狀態(tài)轉(zhuǎn)移”。REST 這個(gè)術(shù)語是由 Roy Fielding 在他的博士論文 《 Architectural Styles and the Design of Network-based Software Architectures 》中提出的。REST是基于一些現(xiàn)有的流傳較廣的協(xié)議和標(biāo)準(zhǔn),例如 HTTP, URI,以及XML等,由因?yàn)?REST,HTTP 協(xié)議有了更加正確的使用。我們可以將REST理解為設(shè)計(jì)模式的一種,它不是標(biāo)準(zhǔn),只是一種用來開發(fā)Web 應(yīng)用的架構(gòu)風(fēng)格。
REST模式與基于 SOAP 和 WSDL 的 Web 服務(wù)相比的優(yōu)勢(shì)在于REST提供的實(shí)現(xiàn)方案更為簡潔。REST 提供的是松耦合的 Web 服務(wù),適合為客戶創(chuàng)建在互聯(lián)網(wǎng)傳播的輕量級(jí)的 Web 服務(wù)的API。REST 應(yīng)用的請(qǐng)求和響應(yīng)是以“資源表述的轉(zhuǎn)移(the transfer of representations of resources)”為中心進(jìn)行的。我們稱的資源包括數(shù)據(jù)和各種功能,如果要訪問資源,只需要使用統(tǒng)一的資源標(biāo)識(shí)符(URI)即可。我們常見的網(wǎng)頁中的鏈接就是典型的 URI。該資源是通過文檔進(jìn)行描述的,由一組簡單的、有明確定義的操作執(zhí)行。
例如,一個(gè) REST 資源可能是一座城市當(dāng)前的天氣情況??赡芡ㄟ^一個(gè)XML文檔、圖像文件或者HTML頁面來對(duì)該資源進(jìn)行表述。我們的客戶端能夠檢索特定的表述,通過更新其數(shù)據(jù)修改的資源,或者完全刪除該資源。
現(xiàn)在,REST 風(fēng)格越來越受歡迎,而且很多 Web 服務(wù)也開始采用它來設(shè)計(jì)與實(shí)現(xiàn),目前我們所知道的比較著名的 REST 服務(wù)包括了:Google AJAX 搜索 API、Amazon Simple Storage Service (Amazon S3) 等。
為了能夠讓 RESTful 應(yīng)用是輕量的,簡單的并且更快開發(fā),基于 REST 的 Web 服務(wù)需要遵循以下一些基本的設(shè)計(jì)原則:
資源 | GET | PUT | POST | DELETE |
---|---|---|---|---|
一組資源的URI, 比如 http://www.waylau.com/resources/ | 列出 URI,以及該資源組中每個(gè)資 源的詳細(xì)信息(后者可選)。 | 使用給定的一組資源替換當(dāng)前整組資源。 | 在本組資源中創(chuàng)建/追加一個(gè)新的資源。 該操作往往返回新資源的URL。 | 刪除 整組資源。 |
單個(gè)資源的URI,比如http://www.waylau.com/resources/142 | 獲取 指定的資源的詳細(xì)信息,格式可以自選一個(gè)合適的網(wǎng)絡(luò)媒體類型(比如:XML、JSON等) | 替換/創(chuàng)建 指定的資源。并將其追加到相應(yīng)的資源組中。 | 把指定的資源當(dāng)做一個(gè)資源組,并在其下創(chuàng)建/追加一個(gè)新的元素,使其隸屬于當(dāng)前資源。 | 刪除 指定的元素。 |
針對(duì) REST 在 Java 中的規(guī)范,主要是 JAX-RS(Java API for RESTful Web Services),該規(guī)范使得 Java 程序員可以使用一套固定的接口來開發(fā) REST 應(yīng)用,避免了依賴于第三方框架。同時(shí),JAX-RS 使用 POJO 編程模型和基于標(biāo)注的配置,并集成了 JAXB,從而可以有效縮短 REST 應(yīng)用的開發(fā)周期。Java EE 6 引入了對(duì) JSR-311 的支持,Java EE 7 支持JSR-339 規(guī)范。
JAX-RS 定義的 API 位于 javax.ws.rs 包中。
伴隨著 JSR 311 規(guī)范的發(fā)布,Sun 同步發(fā)布該規(guī)范的參考實(shí)現(xiàn) Jersey。JAX-RS 的具體實(shí)現(xiàn)第三方還包括 Apache 的 CXF 以及 JBoss 的 RESTEasy 等。未實(shí)現(xiàn)該規(guī)范的其他 REST 框架還包括 SpringMVC 等。
截至目前, JAX-RS 最新的版本是 2.0 (JSR-339)
在 Java 中,既然 規(guī)范的制定者和實(shí)現(xiàn)者都是 Sun 公司(現(xiàn)在是 Oracle),那么 Jersey 毫無疑問就是事實(shí)上的標(biāo)準(zhǔn),對(duì)于 Java REST 的初學(xué)者來說盡量要跟著標(biāo)準(zhǔn)走。當(dāng)然,所有規(guī)范的實(shí)現(xiàn),在用法上基本上沒有差別,只是相對(duì)來說 Jersey 的實(shí)現(xiàn)更全面一些。
本書所有的例子都是基于 Jersey 的,有關(guān) Jersey 的參考,可詳見《Jersey 2.x 用戶指南》。
更多建議: