# JAVA RESTful WebService實(shí)戰(zhàn)筆記(一)

PUT方法

PUT方法是一種寫操作的HTTP請求,REST使用HTTP的PUT方法更新或添加資源

1、更新資源

REST知識風(fēng)格,不是技術(shù)規(guī)范或者標(biāo)準(zhǔn),所以有些實(shí)現(xiàn)REST的細(xì)節(jié)明確的定義,這對實(shí)踐而言,不可避免會產(chǎn)生某些誤解,比如在創(chuàng)建和更新某個資源的時候,開發(fā)者比較迷茫的是何時該用HTTP的PUT方法,何時使用POST方法,為了解決這一問題,我們首先應(yīng)該知道PUT方法的特性,PUT方法是冪等的,即多次插入或者更新同一份數(shù)據(jù),在服務(wù)器端對資源狀態(tài)所產(chǎn)生的改變是相同的,PUT方法是不安全的,有些動作的HTTP方法都不是安全的。我們知道,由于使用同一份數(shù)據(jù)向服務(wù)器請求更新某一資源,得到的結(jié)果應(yīng)該總是相同的,因此對于更新操作,使用PUT是沒有疑問的。

2、添加資源

創(chuàng)建操作通常每次得到的結(jié)果是不同的,因?yàn)榉?wù)器端的業(yè)務(wù)層邏輯通常要求數(shù)據(jù)的主鍵字段要么來自于業(yè)務(wù)平臺自增一個邏輯值,要么來自于數(shù)據(jù)庫中的主鍵自增,因此,相同的數(shù)據(jù)每一次提交到服務(wù)器端,都會為數(shù)據(jù)添加一個新的主鍵值,也就是創(chuàng)建一個主鍵值不同的新資源(如果沒有業(yè)務(wù)或者外鍵沖突)。所以,創(chuàng)建操作通常應(yīng)當(dāng)設(shè)計為POST方法的API,唯有一種場景應(yīng)當(dāng)使用PUT方法來設(shè)計API,即客戶端在發(fā)起創(chuàng)建請求時候,在同一份數(shù)據(jù)中總可以提供唯一的主鍵值,服務(wù)器不會對其進(jìn)行修改,這樣的創(chuàng)建請求確保了冪等性,不應(yīng)該在使用PUT請求


資源地址設(shè)計

資源地址的設(shè)計對整個REST式的Web服務(wù)至關(guān)重要,設(shè)計系統(tǒng)的可用性和可擴(kuò)展性等諸多方面的表現(xiàn)

1、資源路徑概覽

元素 描述
sehema 協(xié)議名稱,通常是HTTP或者HTTPS
host (DNS)主機(jī)名稱或者IP地址
port 服務(wù)端口
path 資源地址,使用"/"符號來分隔邏輯上的層次結(jié)構(gòu)
? 用來分隔資源地址和查詢字符串符號
queryString 查詢字符串,方法作用域信息
使用“&”符號來分隔查詢條件
使用都好分隔有次序的作用域信息
使用分號分隔無次序的作用域信息

資源地址的路徑變量使用來表達(dá)邏輯上的層次結(jié)構(gòu)的,資源和子資源的高興事是自左向右、斜杠分隔的名詞。他們的關(guān)系可以是從整體到局部,比如學(xué)校到班級,城市到鄉(xiāng)村.可以是從一般到具體,比如一個生物的“門”、“綱”、“目”、“科”等。。。的資源路徑,資源地址具體的可以分為5個部分,以sehema://host:port/path?queryString為例,如下表格

元素 描述
sehema 協(xié)議名稱,通常是HTTP或者HTTPS
host (DNS)主機(jī)名稱或者IP地址
port 服務(wù)端口
path 資源地址,使用"/"符號來分隔邏輯上的層次結(jié)構(gòu)
? 用來分隔資源地址和查詢字符串符號
queryString 查詢字符串,方法作用域信息
使用“&”符號來分隔查詢條件
使用都好分隔有次序的作用域信息
使用分號分隔無次序的作用域信息

一個典型的URI如上表所示,包括協(xié)議名稱、主機(jī)名稱、服務(wù)端口、資源地址和查詢字符串5個部分,其中資源地址部分,根據(jù)具體部署的不同或有差別
http://localhost:8080/simple-service-webapp-spring-jpa-jquery/webapi/books/book?id=1

通常使用ContextPath、ServletPaht和PathInfo來細(xì)分資源地址。

  • ContextPath: 上下文名稱,通常和部署服務(wù)器的配置或者REST服務(wù)的web.xml配置有關(guān)。
  • ServletPath: 是Servlet的名稱,與REST服務(wù)中定義的@ApplicationPath注解或者web.xml的而配置有關(guān)

JAX-RS2定義了@Path注解來定義資源地址

  • PathInfo:資源路徑信息,與資源類、子類及勒種的方法蒂尼的@Path注解有關(guān)

2、資源地址和作用域

功能 資源地址
添加/創(chuàng)建 POST/books
PUT/books/{id}
刪除 DELETE/books/{id}
修改/更新 PUT/books/{id}
查詢?nèi)?/td> GET/books HTTP1.1
主鍵查詢 GET/books/{id} HTTP1.1
GET /books?id=12334
分頁作用域查詢 GET/books/{id} HTTP1.1
GET /books/01,2002-12,2014
GET /books/restful;program=java;type=web
GET /books?limit=100&sort=bookname

在路徑變量里面可以使用標(biāo)點(diǎn)符號以輔助增強(qiáng)邏輯清晰性。如下表所示

功能 資源地址
添加/創(chuàng)建 POST/books
PUT/books/{id}
刪除 DELETE/books/{id}
修改/更新 PUT/books/{id}
查詢?nèi)?/td> GET/books HTTP1.1
主鍵查詢 GET/books/{id} HTTP1.1
GET /books?id=12334
分頁作用域查詢 GET/books/{id} HTTP1.1
GET /books/01,2002-12,2014
GET /books/restful;program=java;type=web
GET /books?limit=100&sort=bookname
  • 問號(?) 是用來分隔資源路徑地址和查詢字符串,與符號(&)是用來分隔查詢條件的參數(shù),示例代碼如下
GET /books?start=0&size=19

代碼解釋:開始行參數(shù)為0,查詢的條目是19,及從第0行開始查詢?nèi)?9條數(shù)據(jù)

  • 逗號(,)是用來分隔有次序的作用域信息,需要注意的是逗號分隔符的邏輯上的順序信息,這種順序可以是約定俗成的,比如先寫經(jīng)度然后緯度;也可以是系統(tǒng)約定的,比如年、月、日、時等。
    舉例來說:按時間區(qū)域查詢圖書,日期信息在資源地址中是采用月、年順序,代碼如下
GET /books/01,2002-12,2014

代碼解釋:查詢2002年1月到2014年12月的這個時間段的圖書,這個例子中還使用到了連字符(-),有時候也可以使用下劃線(_)來做邏輯上的輔助分隔。

  • 分號(;)是用來分隔無次序的作用域信息,通常這些信息是邏輯上并列存在的,比如并列的查詢條件,示例代碼如下
GET /books/restful;program=java;type=web

代碼解釋:查詢滿足圖書內(nèi)容為restful的,石宏的編程語言是java的講述的類型是web的圖書列表。


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,506評論 19 139
  • 一說到REST,我想大家的第一反應(yīng)就是“啊,就是那種前后臺通信方式?!钡窃谝笤敿?xì)講述它所提出的各個約束,以及如...
    時待吾閱讀 3,594評論 0 19
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 47,253評論 6 342
  • 我既不想嫁給左先生,也不想嫁給右先生 文/暗香清影 最近被刷爆朋友圈的是老梗左先生右先生,究竟嫁給誰...
    暗香屋閱讀 340評論 0 3
  • 小動畫里的大世界 一直以來,動畫片都是孩子們的專利,可最近幾年動畫片的制作越來越精良,所探討的故事主題越來越廣泛,...
    楊明潔閱讀 306評論 0 0

友情鏈接更多精彩內(nèi)容