我正在開發一個REST API的那一刻,和這是核心特性之一使用了各種HTTP狀態代碼,返回狀態/錯誤信息,其中一些可能是擴展的信息(例如,如果一個項目沒有找到,一些其他類似的項目)將在響應主體。發送自定義HTTP錯誤信息給Flash,JavaScript的,等
這很好,直到你找到像Flash和JavaScript這樣的客戶端不能訪問響應主體或頭部,除非HTTP狀態代碼是200 OK(即使是201創建的成功代碼也會導致Flash無法思考這是一個錯誤)。
所以我的問題是,是否有一種標準的方式允許這種類型的客戶端請求所有狀態代碼是HTTP 200,並以另一種方式指示真實狀態代碼?
我想到的一個解決方案是,在HTTP Accept-*
標頭系列的模式中,使用X-Accept-Status
擴展標頭來指定可以處理哪些狀態碼,例如,閃存就送......
X-Accept-Status: 200
...然後在此名單將被映射到一個是任何狀態代碼,並在響應體返回的錯誤,可能與另一個擴展頭指示實狀態碼,例如
X-HTTP-Status-Code: 404 Not Found
這一切似乎有點恐怖,以及對協議的工作,但如果你有不能使用的協議屬性,則客戶這是不可避免的。我只是在尋找的東西有點像X-HTTP-Method-Override
(這是周圍的協議工作不能發送PUT
/DELETE
請求的客戶端的「標準」的方式),但無法理解的狀態代碼客戶端。
問題是什麼時候客戶端根本沒有辦法使用「正確」構建的應用程序。想象一下與你的經理交談......你:「不,我們不能讓[插入大公司]在API中使用API,即使他們會付錢給我們(在這裏插入大量資金),因爲他們無法調用它完美的方式「。老闆:「改變它,讓他們可以稱之爲現在。」 – 2009-07-17 10:50:10