JavaOne 2013:將REST與JSON相結(jié)合以創(chuàng)建API
譯文創(chuàng)建一套可通過Web進行訪問的應(yīng)用程序編程接口并不困難,但打造一套既運作良好又穩(wěn)定可靠的API卻沒那么容易,Stormpath公司首席技術(shù)官Les Hazlewood在JavaOne 2013大會上表示。為了順應(yīng)與會觀眾們的強烈呼聲,Hazlewood于本周二重返JavaOne舞臺、向大家介紹了如何利用JAX-RS與Jersey創(chuàng)建優(yōu)秀的REST + JSON API。
“一款出色的具象狀態(tài)傳輸(簡稱REST)API從表面上看應(yīng)該很簡單,即使其后端機制實際相當(dāng)復(fù)雜,”Hazlewood在介紹環(huán)節(jié)之前的記者采訪中指出。如果一款A(yù)PI的專注重點在于收集信息并為各條信息提供各自獨立的代表,那么只要削減API中的收集及搜索機制(而非羅列所有已經(jīng)采用的對象),我們就能獲得一款簡潔而出色的方案,直觀而絕不復(fù)雜。
Les Hazlewood
在問答環(huán)節(jié)中,Hazlewood深入探討了API最佳實踐、REST API的優(yōu)勢與劣勢以及JavaScript Object Natation(簡稱JSON)等話題。
為什么Java開發(fā)人員樂于嘗試REST API?
Les Hazlewood: REST是一套以現(xiàn)有HTTP為基礎(chǔ)建立起來的架構(gòu)風(fēng)格。在HTTP規(guī)范當(dāng)中,我們交換數(shù)據(jù)以及創(chuàng)建、讀取、更新與刪除數(shù)據(jù)的方式已經(jīng)被確定下來。在互不相干的設(shè)備中創(chuàng)建即讀即刪信息時,REST能夠負(fù)責(zé)決定特定情況該如何處理。
這正是REST的主要作用;負(fù)責(zé)此類操作在互不相干的設(shè)備間執(zhí)行時該如何處理。由于REST以HTTP為基礎(chǔ),因此我們可以在Linux設(shè)備、Windows設(shè)備與蘋果Mac設(shè)備之間進行通信??傊?,REST無需局限于特定平臺或者供應(yīng)商類型——由于HTTP無處不在,因此REST也能夠廣泛起效。所有編程語言,包括Python、PHP、Java以及C#,都能夠與REST并行協(xié)作。
從各個方面來說,REST往往由于自身的迷惑性而被看得過于簡單。每個人都自認(rèn)為了解HTTP,因為這正是Web瀏覽器的表面方式。技術(shù)人員了解HTTP協(xié)議、GIT以及POST,因為他們已經(jīng)以Web形式與之接觸多年。而由于REST使用HTTP協(xié)議,開發(fā)人員會習(xí)慣性地低估其實際復(fù)雜性。事實上,如今的REST服務(wù)已經(jīng)遠(yuǎn)遠(yuǎn)超過XML(過去一直搭配SOAP,即簡單對象訪問協(xié)議)的范疇。
使用REST會遇上哪些難點?
Hazlewood:這正是我來到這里向大家進行介紹的原因。REST是一種架構(gòu)風(fēng)格,但其使用方法還缺乏正式的標(biāo)準(zhǔn)或者規(guī)范。要了解這種風(fēng)格,我們需要為其添加注釋,否則不同使用者對于功能的理解與效果會出現(xiàn)一定程度的偏差。這是因為REST并非一套能夠在設(shè)備之間直接照搬的規(guī)范,而且人為因素的介入也會引發(fā)歧義。在這樣的情況下,要正確或者輕松使用REST將變得充滿困難。REST與JSON都很簡單,HTTP也很簡單,但在將這幾種機制結(jié)合起以解決特定問題時,大家會發(fā)現(xiàn)自己很難找到既定的成熟指導(dǎo)。
您在JavaOne介紹環(huán)節(jié)中建議將JSON與REST相結(jié)合,還有其它什么理由嗎?
Hazlewood: REST與JSON提供了更為人性化的數(shù)據(jù)表示方式;數(shù)據(jù)看起來不再像XML格式那樣擁擠;更便于我們直接用肉眼查看。而這正是JSON被廣泛采用的真正原因。
JSON是一種語法規(guī)則。簡單概括,它的內(nèi)容就是字符串、數(shù)字、空、非空。它允許大家以非常簡單的格式通過少量元數(shù)據(jù)表示復(fù)雜的情況。我們能夠輕松將其使用在多種不同環(huán)境之下。它易于機器解析,也同樣適合人們直接閱讀。
JavaScript是目前世界上最具影響力的重要編程語言之一。即使是在主要由Java、Python或者C#編寫的應(yīng)用程序中,一旦涉及網(wǎng)頁或者直觀用戶界面,那么出場解圍的也必然是JavaScript。JSON與JavaScript完全兼容,任何擁有JavaScript編程經(jīng)驗的技術(shù)人員都能輕松掌握J(rèn)SON。如果大家已經(jīng)跟JavaScript打過交道,那么將其與API相整合也絕非難事。如果API返回JSON且大家已經(jīng)利用JavaScript編寫代碼,那么編程語言本身就會了解如何闡釋來自服務(wù)器的數(shù)據(jù)。JSON借助人氣極盛的JavaScript處理數(shù)據(jù)交換(而不僅是寫入軟件)任務(wù)。
何時適合使用JSON,何時不適合?
Hazlewood:很顯然,XML在數(shù)據(jù)復(fù)制架構(gòu)方面的表現(xiàn)更出色。XML文檔中包含的信息更豐富,而且其中的數(shù)據(jù)類型劃分也更為高效。XML非常適合處理數(shù)據(jù)交換任務(wù),但糟糕的易用性往往令開發(fā)人員望而卻步。JSON內(nèi)容適合直接閱讀,XML在設(shè)計方面則更為復(fù)雜。JSON的語法簡單易懂。說起語言設(shè)計,JSON中的核心元素非常有限,全部開發(fā)成果都以此為基礎(chǔ)。由于其出色的簡單特性,我們能夠輕松對其加以操控及理解。不過在設(shè)備消耗信息方面,JSON的表現(xiàn)遠(yuǎn)不如XML。XML更適合設(shè)備直接處理。
原文鏈接:http://searchsoa.techtarget.com/news/2240205998/JavaOne-2013-Pairing-REST-and-JSON