2013-06-24 36 views
0

我正在開發一些使用cxf和spring的web服務。這些服務必須能夠識別語言環境,因爲有些消息是在數據庫中定義的。Web服務i18n

實施它的正確方法是什麼?

語言環境應該如何傳遞給服務?可能位於HTTP標頭或SOAP標頭中。我不希望除了使用HTTP之外的其他傳輸,所以可能是HTTP頭將是一個不錯的選擇。

如何從Web服務代碼中檢索區域設置?可能我可以使用一些Spring線程的本地功能。順便說一下,我使用Spring安全進行身份驗證和授權,所以我可以在安全上下文中設置語言環境。

任何評論或例子都會有很大的幫助。

非常感謝提前!

+0

也許你可以將它添加到方法簽名? – heikkim

+0

語言環境在我看來就像一個元數據,我認爲它的一個更合適的地方是在一些標題。 –

+1

我瞭解您的POV,但將其添加到該方法中會更加切合需要的事實。更不用說,它可以節省客戶端開發人員需要修改他們的WS框架以找到如何發送頭文件(而所有這些頭文件都被用來作爲參數發送數據)的可能性。 – SJuan76

回答

1

一般來說你要求暗示明顯論點的利弊

隱式參數通常用於傳遞數據庫連接,多租戶ID,用戶語言等 - 這些事情並非真正的直接函數/服務參數,但它們會影響正在生成的結果。

在一個封閉的系統中,你可以考慮隱式地傳遞它們。所以沒有必要明確地傳遞這些信息(這會導致你的代碼混亂)。另一方面,它使得你的代碼「不那麼明確」:如果你(或其他人)稍後看了代碼,可能不清楚是否還有別的東西在引擎蓋下傳遞:隱式參數聲明的位置以及隱式使用它的函數可能會造成混淆。

所以即使在一個封閉的系統中也應該小心使用這個特性:「少打字」的優點應該與「不可見隱式參數」的成本相比較。另一方面,在公共API的上下文中,我不會使用implicits:沒有什麼比一個顯式傳輸所有參數的函數調用簡單:我不會添加任何其他人工技術複雜性。如果您保持技術界面簡單,可能會阻止來電方的挫敗感。