2012-11-06 29 views
4

我剛剛開始構建多語言REST API,並且不確定是否有任何關於如何正確集成多語言的約定。如何安排我的多語言REST API?

下面是我提出的替代方案列表,不知道哪個最有意義。

選項1:
語言 - 變量在URI:http://myapi.com/en/users/john

選項2:
返回僅用於翻譯客戶端錯誤代碼: GET http://myapi.com/users/john => HTTP 404 {status: false, error_code: "321"}

選項3:
以所有語言返回:GET http://myapi.com/users/john => {status: false, error_en: "User not found", error_sv: "Anvandaren finns inte"}

+0

請說明您的域名中「正確使用多種語言」的含義。不同的語言可以有不同的用戶'john'嗎? – 2012-11-06 11:17:05

+0

不,數據對於所有語言以及資源名稱都是相同的。只有人類可讀的字符串應該更改 – Industrial

回答

8

對於content negotiation作爲談判的代表的自然語言,HTTP提供request header Accept-Language

Accept-Language: da, en-gb;q=0.8, en;q=0.7 

如果可能的話,服務器用一個response header Content-Language這個請求:

Content-Language: da 

只有如果資源是不同資源爲不同語言,該語言應該是部分的URI。如果不是,則應使用內容協商。

+0

在這種情況下,內容協商將僅用於在響應中協商可讀字符串的語言。非字符串或不適用於人的字符串(例如對象鍵)不會被翻譯。 –

+1

@DonalFellows是的。從這個問題我不確定這是'多語言REST API'的含義。但是如果有疑問,請使用標準:) – 2012-11-06 11:50:23