# JAVA RESTful WebService實戰筆記(一)

PUT方法

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

1、更新資源

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

2、添加資源

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


資源地址設計

資源地址的設計對整個REST式的Web服務至關重要,設計系統的可用性和可擴展性等諸多方面的表現

1、資源路徑概覽

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

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

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

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

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

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

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

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

2、資源地址和作用域

功能 資源地址
添加/創建 POST/books
PUT/books/{id}
刪除 DELETE/books/{id}
修改/更新 PUT/books/{id}
查詢全部 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

在路徑變量里面可以使用標點符號以輔助增強邏輯清晰性。如下表所示

功能 資源地址
添加/創建 POST/books
PUT/books/{id}
刪除 DELETE/books/{id}
修改/更新 PUT/books/{id}
查詢全部 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
  • 問號(?) 是用來分隔資源路徑地址和查詢字符串,與符號(&)是用來分隔查詢條件的參數,示例代碼如下
GET /books?start=0&size=19

代碼解釋:開始行參數為0,查詢的條目是19,及從第0行開始查詢去19條數據

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

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

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

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


最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,030評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,310評論 3 415
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,951評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,796評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,566評論 6 407
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,055評論 1 322
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,142評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,303評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,799評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,683評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,899評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,409評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,135評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,520評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,757評論 1 282
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,528評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,844評論 2 372

推薦閱讀更多精彩內容

  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,781評論 18 139
  • 一說到REST,我想大家的第一反應就是“啊,就是那種前后臺通信方式。”但是在要求詳細講述它所提出的各個約束,以及如...
    時待吾閱讀 3,444評論 0 19
  • Spring Boot 參考指南 介紹 轉載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,891評論 6 342
  • 我既不想嫁給左先生,也不想嫁給右先生 文/暗香清影 最近被刷爆朋友圈的是老梗左先生右先生,究竟嫁給誰...
    暗香屋閱讀 315評論 0 3
  • 小動畫里的大世界 一直以來,動畫片都是孩子們的專利,可最近幾年動畫片的制作越來越精良,所探討的故事主題越來越廣泛,...
    楊明潔閱讀 258評論 0 0