2010-06-22 79 views
0

我正在開發一些使用Ruby on Rails的SOAP Web服務,並考慮如何處理一般故障。這些一般性錯誤適用於服務中的所有方法,幷包括以下內容: -SOAP服務器實現錯誤通知的「最佳實踐」是什麼?

  • 缺少請求元素
  • 缺少認證元素(自定義)
  • 無效的認證細節

我可以在調用相關方法並做出適當響應之前,攔截控制器中的這些錯誤。我的問題是從客戶的角度來看哪個實施最容易管理。我處理這些錯誤的選項似乎如下。

  1. 引發異常並讓SOAP服務生成SoapFault。這樣可以很好,除非我對SOAP錯誤中包含的消息的結構有很少的(無)控制。
  2. 用約定的數據結構返回Http 400響應以指示錯誤消息。雖然這個結構不會在WSDL中定義。
  3. 在所有響應中包含一個Status元素,無論是否成功,並且該狀態元素包含代碼和錯誤數據(包括錯誤消息)數組。

選項三似乎是最好的解決方案,但也是最容易實現的錯誤,因爲ROR中的web服務的實現阻礙了我以通用的方式實現這一點,並且每個方法都負責檢查結果檢查並呈現適當的響應。無可否認,這將是一個單一的函數調用,並在失敗時返回,但它依賴於開發人員記住在添加更多選項時執行此操作。

我明白大多數ROR開發人員會說這應該作爲REST服務來實現,我同意,事實上我們已經有REST服務來做到這一點,但是SOAP在企業界的普及以及其令人印象深刻的工具支持意味着我們必須提供SOAP服務才能保持競爭力。

根據您的經驗,客戶需要處理的最簡單的實現是什麼,並且這取決於客戶端過程的庫/語言。

回答

0

SoapFault將是表示錯誤的首選方式。 SoapFaults可以在其元素<detail>中包含其他信息。

SoapFault優於某些狀態元素的優點是調用者可以使用標準異常處理而不是檢查某些狀態字段。