簡體   English   中英

自上而下的 web 服務和自下而上的 web 服務有什么區別?

[英]What is the difference between a top-down web service and a bottom-up web service?

在 Java 中,自上而下的 web 服務和自下而上的 web 服務有什么區別? 另外,SOAP 和 REST-ful web 服務有什么區別?

自上而下意味着您從 WSDL 開始,然后在 Java 中創建所有必要的腳手架。

自下而上意味着您從 Java 方法開始,並從中生成 WSDL。

SOAP 表示 URL 對於所有調用都是相同的,只有 Java 方法的參數不同。 REST 表示 URL 加上在其上調用的 HTTP 方法反映了要完成的操作。

合同優先與合同最后

自下而上:方法對問題進行高級定義並將其細分為子問題。

最后合同 偏愛自下而上的開發風格有以下優點

  • 代碼優先
  • 初期很容易發展。

缺點:

  • 維護非常非常辛苦。
  • 緊密耦合

自上而下:考慮基本功能和需要的部分。

合約優先 首選自上而下的開發方式有以下原因。

1. 脆弱性最后合約開發風格導致您的 web 服務合約(WSDL 和您的 XSD)是從您的 Java 合約(通常是一個接口)生成的。 如果您使用這種方法,您將無法保證合同隨着時間的推移保持不變。 每次更改 Java 代碼並重新部署它時,web 服務合同可能會發生后續更改。 此外,並非所有 SOAP 堆棧都從 Java 合同生成相同的 web 服務合同。 這意味着將您當前的 SOAP 堆棧更改為不同的堆棧(無論出於何種原因),也可能會更改您的 web 服務合同。 當 web 服務合同更改時,必須指示合同用戶獲取新合同並可能更改其代碼以適應合同中的任何更改。 為了使合同有用,它必須盡可能長時間地保持不變。 如果合同發生變化,您必須聯系您服務的所有用戶,並指示他們獲取新版本的合同。

2. 性能當Java自動轉換為XML時,無法確定通過線路發送的是什么。 一個 object 可能會引用另一個 object,它引用另一個,等等。最后,虛擬機中堆上的一半對象可能會轉換為 XML,這將導致響應時間變慢。 使用合同優先時,您明確描述 XML 發送到哪里,從而確保它正是您想要的。

3. 可重用性在一個單獨的文件中定義你的模式允許你在不同的場景中重用那個文件。

4. 版本控制盡管合同必須盡可能長時間地保持不變,但有時確實需要對其進行更改。 在 Java 中,這通常會導致新的 Java 接口,例如 AirlineService2,以及該接口的(新)實現。 當然,舊服務必須保留,因為可能有客戶端尚未遷移。 如果使用契約優先,我們可以在契約和實現之間有一個更松散的耦合。 這種更松散的耦合允許我們在一個 class 中實現合約的兩個版本。

在此處輸入圖像描述

@mad_programmer - 您的意思是使用自下而上或自上而下的方法構建 Web 服務。 首先,您開始將類和業務邏輯編程為 java 代碼,然后從中生成 web 服務合同(即 WSDL)。 后一種方法則相反(從 WSDL 生成 class 存根)。

支持安徒生的回答,我想補充一點。 基本上人們傾向於使用自底向上的方法,因為在大多數情況下,我們已經開始編寫 bean、業務邏輯等的過程,然后在持久層中,我們創建 web-services、wsdl 等。一個新項目,你從頭開始構建一些東西,我們可以使用自上而下的方法,我們只需編寫 wsdl 並構建骨架將為你提供 bean、實現、接口等。不過,請記住計算機無法生成你的邏輯想。 因此,您仍然需要通過整個項目 go 並填補空白。

在項目從頭開始時添加答案,通常的方法是創建一個非常基本的接口,然后從中創建一個 WSDl。 這將使您免於編寫復雜的 WSDl。 然后我們可以直接在 WSDl 中添加項目特定的操作,一旦 WSDl 完成,我們可以通過自上而下的方法提前 go。

在自上而下,你定義你首先要做什么。 即你的wsdl。 然后你繼續進行實際開發。 雖然首先創建 wsdl 似乎很困難,但推薦它(參考 Eclipse) ,因為從長遠來看它可以簡化您的開發。

完全相反的情況發生在自下而上。 我們從代碼部分開始,然后使用內置工具創建 wsdl。 這在開始時可能看起來很容易,但是當您 go 代碼的復雜性很大時,它會造成很多混亂。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM