我们正在编写一个REST API,它将被公开曝光并被许多第三方开发人员使用。我正在研究http状态代码的最佳实践,尤其是在错误情况下。
我们的应用程序内部有许多组件,API是接口。如果内部组件有任何错误,我应该返回500并带有相应的错误消息吗?
在浏览SO时,我发现一些博客/ SO主题提出了不同的方式,但没有一个具体的答案。
非常感谢任何帮助。
答案 0 :(得分:3)
这是非常主观的。这是我的意见,写了几个中等复杂的API。
意识到HTTP状态代码不会巧妙地映射到内部组件将返回的错误类型。他们没有被设计成。
要遵循的基本规则是200就可以了,其他任何事都是错误。
我基本上只使用这4个非OK状态代码:
400 =糟糕的请求。呼叫者发送了无效的请求参数。 401 =未经授权。调用者缺少发出请求的权限。 404 =未找到。调用者请求了一个无法找到或不存在的资源。 500 =内部服务器错误。其他一切。发生了一些不好的事情,来电者可能无法做任何事情。
对于HTTP状态代码而言,就我而言。
但我不会就此止步。我总是返回一个JSON响应,其中包含我自己的错误代码,消息,以及 - 在测试环境中 - 堆栈跟踪。我的错误代码是呼叫者可以根据需要编程的数字。就我而言,这是真正的错误代码。
答案 1 :(得分:1)
以下是最佳api实践的代码列表。
codes = Array(
100 => 'Continue',
101 => 'Switching Protocols',
200 => 'OK',
201 => 'Created',
202 => 'Accepted',
203 => 'Non-Authoritative Information',
204 => 'No Content',
205 => 'Reset Content',
206 => 'Partial Content',
300 => 'Multiple Choices',
301 => 'Moved Permanently',
302 => 'Found',
303 => 'See Other',
304 => 'Not Modified',
305 => 'Use Proxy',
306 => '(Unused)',
307 => 'Temporary Redirect',
400 => 'Bad Request',
401 => 'Unauthorized',
402 => 'Payment Required',
403 => 'Forbidden',
404 => 'Not Found',
405 => 'Method Not Allowed',
406 => 'Not Acceptable',
407 => 'Proxy Authentication Required',
408 => 'Request Timeout',
409 => 'Conflict',
410 => 'Gone',
411 => 'Length Required',
412 => 'Precondition Failed',
413 => 'Request Entity Too Large',
414 => 'Request-URI Too Long',
415 => 'Unsupported Media Type',
416 => 'Requested Range Not Satisfiable',
417 => 'Expectation Failed',
500 => 'Internal Server Error',
501 => 'Not Implemented',
502 => 'Bad Gateway',
503 => 'Service Unavailable',
504 => 'Gateway Timeout',
505 => 'HTTP Version Not Supported'
);
答案 2 :(得分:0)
最有用的请求状态代码: