2013-05-18 54 views
148

目前正在進行一些考試,我正在努力探索一些概念。這些在我的筆記中都被「提及」了,但我並不真正瞭解它們是如何聯繫在一起的。據我的理解是:JSON,REST,SOAP,WSDL和SOA:它們如何鏈接在一起

SOA - 一個解決方案,使服務消費者/供應商溝通。 (據我所知,這是所有其他內容的總稱)

WSDL - 描述提供者服務的語言。

SOAP - 服務用來發送消息的XML協議'包裝器'。與WSDL一起工作以提供參數?

REST - 一種類似於SOAP的設計模式,但是避免使用XML? (真的不知道這個)

JSON - XML的替代使用JavaScript? (不知道這一個)

環顧網絡似乎並沒有一個明確的定義,所有這些是什麼以及他們如何相互鏈接。

回答

238

想象一下,您正在開發一個Web應用程序,並且您決定從應用程序的表示中分離功能,因爲它提供了更大的自由度。

您創建了一個API並讓其他人也實現了它們自己的前端。你剛剛在這裏做的是實現SOA方法,即使用網絡服務。

Web服務使功能構建塊可通過標準的 互聯網協議訪問,獨立於平臺和編程語言。

因此,您設計了處理和生成有用內容的後端(Web服務)和可能是任何內容的前端(它將消耗數據)之間的交換機制。 (Web,移動或桌面應用程序或其他Web服務)。這裏唯一的限制是前端和後端必須「說」相同的「語言」。


這就是SOAP和REST進來。 他們是你挑選與Web服務通信標準的方法。

SOAP:

SOAP內部使用XML來發送數據來回。 SOAP消息具有嚴格的結構,因此需要解析響應XML。 WSDL是可以制定什麼請求,使用哪些參數以及它們將返回什麼的規範。它是你的API的完整規範。

REST:

REST是一種設計理念。

萬維網代表符合REST架構風格的系統的最大實現 。

它不像SOAP那樣僵硬。RESTful web-services使用標準的URI和方法來調用web服務。當你請求一個URI時,它返回一個對象的表示,然後你可以對其執行操作(例如GET,PUT,POST,DELETE)。您不限於選擇XML來表示數據,您可以真正挑選任何內容(包括JSON)

Flickr的REST API更進一步,可讓您返回圖像。


JSON和XML,在功能上是等價的,並且或者可以選擇。 XML被認爲過於冗長,而且難以解析,所以使用JSON可以更充分地表達數據。 (例如,序列化)

It is a choice nonetheless.

+34

優秀的答案一直到上JSON的虎頭蛇尾VS XML。更平衡的版本將是:XML和JSON是串行化數據的方式。 XML更靈活,並且圍繞它設計了許多標準,但有些人認爲它太複雜和冗長。 JSON是一種更簡單的格式,它以簡潔的方式定義了幾個基本結構,這對於非正式的數據結構很容易使用;一些人正在制定標準來複制那些存在於XML之上的標準。 – IMSoP

22

WSDL:代表Web服務描述語言

在SOAP(簡單對象訪問協議),當您使用Web服務,並添加Web服務到您的項目,您的客戶端應用程序(一個或多個)不瞭解Web服務功能。現在,它不知何故是老式的,對於每種不同的客戶端,你必須實現不同的WSDL文件。例如,對於.Netphp客戶端,您不能使用相同的文件。 WSDL文件對Web服務功能有一些描述。這個文件的類型是XMLSOAPREST的替代品。

REST:代表具象狀態傳輸

這是另一種API服務,這是很容易使用的客戶端。它們不需要像WSDL文件那樣的特殊文件擴展名。 CRUD操作可以通過不同的HTTP Verbs(讀取GET,創建POST,更新PUT或PATCH和刪除所需文檔的DELETE)實現,它們基於HTML協議,並且響應的大部分時間爲JSONXML格式。另一方面,客戶端應用程序必須通過確切的參數名稱和類型完全調用相關的HTTP Verb。由於沒有用於定義的特殊文件,如WSDL,它是使用端點的手動作業。但是這不是什麼大問題,因爲現在我們有很多插件用於不同的IDE來生成客戶端實現。

SOA:代表面向服務架構

包括所有與Web服務的概念和架構的編程。想象一下你想要實現一個大規模的應用程序。一種做法可能有一些不同的服務,稱爲微服務,整個應用程序機制將在正確的時間調用所需的Web服務。 RESTSOAP網絡服務都是SOA

JSON:代表javascript Object Notation

時序列化對象的JavaScript對象格式的類型是JSON。 假設你有人類的類:

class Human{ 
string Name; 
string Family; 
int Age; 
} 

,你必須從這個類中的一些實例:

Human h1 = new Human(){ 
    Name='Saman', 
    Family='Gholami', 
    Age=26 
} 

時序列化H1對象JSON結果是:

[h1:{Name:'saman',Family:'Gholami',Age:'26'}, ...] 

javascript可以通過eval()函數來評估此格式並從此JSON字符串中創建關聯數組。與以前描述的其他概念相比,這是一個不同的概念。