本文目錄一覽:
- 1、為什麼很多web應用的api都用json開發,和gsoap+webservice相比,它有哪些優缺點
- 2、WEB開發中,使用JSON-RPC好,還是RESTful API好
- 3、在 java web開發中怎麼使用json?
為什麼很多web應用的api都用json開發,和gsoap+webservice相比,它有哪些優缺點
json和soap+webservice是一種數據交互格式,目前所有的平台都對他們進行支持。json是以鍵值對的形式展現的長串,webservice交互的數據多為xml,就可讀性和可擴展性而言,兩種方式不相上下。編碼的方便程度上json要稍微占點優勢,沒有xml那種多於的標籤對。客戶端在使用json串的的時候,只需要eval(),eval這個函數很多語言都有,比如js,as 等等。在維護方面維護一段xml串比一段json我想難度要大點
WEB開發中,使用JSON-RPC好,還是RESTful API好
兩者沒有高下之分,無非是一種約定俗成的標準。習慣用RPC就用RPC,能理解REST就用REST。
JSON-RPC比較符合直觀,格式也相對寬鬆;
REST最近正流行,有自己的一套設計規範。
REST面對的疑問跟當年剛開始流行面向對象時的情況是一樣的。
它適合很多情況,但並不適合所有情況。
最差的結果就是盲目跟風,又對REST的概念和理念一知半解,最後搞出一個半吊子的怪胎,還自我標榜用了流行的RESTful API。
REST是一種設計風格,它的很多思維方式與RPC是完全衝突的。
RPC的思想是把本地函數映射到API,也就是說一個API對應的是一個function,我本地有一個getAllUsers,遠程也能通過某種約定的協議來調用這個getAllUsers。至於這個協議是Socket、是HTTP還是別的什麼並不重要;
RPC中的主體都是動作,是個動詞,表示我要做什麼。
而REST則不然,它的URL主體是資源,是個名詞。而且也僅支持HTTP協議,規定了使用HTTP Method表達本次要做的動作,類型一般也不超過那四五種。這些動作表達了對資源僅有的幾種轉化方式。
這種設計思路是反程序員直覺的,因為在本地業務代碼中仍然是一個個的函數,是動作,但表現在介面形式上則完全是資源的形式。
就像面向對象的「萬物皆對象」理論在習慣了純粹面向過程開發的程序員眼裡顯得十分彆扭一樣:我的代碼本來就是按順序、循環、分支這麼運行的啊,為啥非得在很明確的結構上封裝一層一層的基類子類介面,還要故意給兩個函數起同一個名字,調用時才選擇用哪一個呢?
使用「萬物皆資源」的思想編寫實際項目中的API介面時,最常見的問題就是「這玩意到底是個什麼資源?………………算了,我就直接寫吧,不管什麼風格了」
比如,login和logout應該怎麼REST化?
比如,多條件複合搜索在GET里寫不下怎麼辦?
比如,大量資源的刪除難道要寫幾千個DELETE?
其實在理解了REST後,這些都不是什麼無解的難題,只是思維方式要轉換一下:
login和logout其實只是對session資源的創建和刪除;
search本身就是個資源,使用POST創建,如果不需持久化,可以直接在Response中返回結果,如果需要(如翻頁、長期緩存等),直接保存搜索結果並303跳轉到資源地址就行了;
id多到連url都寫不下的請求,應該創建task,用GET返回task狀態甚至執行進度;
……等等等。
如果只是規定了一種規範,卻不理解它表相下面的思維方式,實施中又按照自己的理解隨意變動,那結果肯定是混亂不堪的。
當然,API怎麼寫是開發者的自由。但如果一個API在url里放一堆動詞、資源設計混亂、各種亂用HTTP Method和Status Code,還自稱RESTful API的話,那就像你養了一條狗,還管它叫貓一樣。
這種混搭產物,不如叫它REFU吧。
(Remove Extension From Url:從url里去掉文件擴展名)
前面說了半天REST的理念和不懂REST造成的問題,但是,這並不代表REST比RPC更「高等」,更不是說不理解REST的人是落伍的。
所謂代碼風格、介面形式、各種林林總總的格式規定,其實都是為了在團隊內部形成共識、防止個人習慣差異引起的混亂。JSON-RPC當然也是有規範的,但相比REST實在寬鬆太多了。
如果一個開發團隊規定必須在url里寫action,所有請求都是POST,可以嗎?當然也沒問題,只是不要拿出去標榜自己寫的是RESTful API就行。
規範最終還是為了開發者和軟體產品服務的,如果它能帶來便利、減少混亂,就值得用;反之,如果帶來的麻煩比解決的還多,那就犯不上純粹跟風追流行了。
在 java web開發中怎麼使用json?
一、JSON建構有兩種結構:
json簡單說就是javascript中的對象和數組,所以這兩種結構就是對象和數組2種結構,通過這兩種結構可以表示各種複雜的結構
1、對象:對象在js中表示為「{}」括起來的內容,數據結構為 {key:value,key:value,…}的鍵值對的結構,在面向對象的語言中,key為對象的屬性,value為對應的屬性值,所以很容易理解,取值方法為 對象.key 獲取屬性值,這個屬性值的類型可以是 數字、字元串、數組、對象幾種。在Java中就是一種Map結構。
2、數組:數組在js中是中括弧「[]」擴起來的內容,數據結構為 [“java”,”javascript”,”vb”,…],取值方式和所有語言中一樣,使用索引獲取,欄位值的類型可以是 數字、字元串、數組、對象幾種。在Java中是一種list結構。
經過對象、數組2種結構就可以組合成複雜的數據結構了。
二、Json in Javascript
使用Json語法創建對象
var people = {“name”:”jack”,”sex”:”mail”};
可以通過這種語法創建json對象,用「{}」括起來,用「,」隔開key:value
使用Json語法創建數組
var arr =[value1,value2…];
一個包含多個people的數組 peoples = [{“name”:”jack”,”sex”:”mail”},
“name”:”lily”,”sex”:”femail”};
Json數組可以通過這種語法創建,用”[]”括起來,數組元素之間用「,」分隔開,下面是這種語法的示意圖:
在使用Json格式字元串與伺服器交互時候,可以利用Json擴展的方法將字元串轉換成一個JavaScript對象,或者將一個對象轉換成Json格式字元串。不過先要登錄下載Json2.js文件。引入該包後,js對象直接用toJSONString()裝換為字元串格式,字元串可以用parseJSON()轉換成js對象。
訪問數據
只需用點號表示法來表示數組元素。所以,要想訪問 上面peoples列表的第一個條目的名字,只需在 JavaScript 中使用下面這樣的代碼:
peoples[0].name
利用這樣的語法,可以處理任何 JSON 格式的數據,而不需要使用任何額外的 JavaScript 工具包或 API。
修改數據
正如可以用點號和方括弧訪問數據,也可以按照同樣的方式輕鬆地修改數據:
peoples[0].name = “Rachmaninov”;
在將字元串轉換為 JavaScript 對象之後,就可以像這樣修改變數中的數據。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/237007.html