我正在开发一个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