REST API Http状态码最佳实践

5
我们正在编写一个REST API,将公开并由许多第三方开发人员使用。我正在寻找最佳实践,特别是在错误情况下的http状态码。
我们的应用程序有很多内部组件,API是其接口。如果内部组件出现任何错误,我应该返回带有适当错误消息的500吗?
在SO上查找时,我发现一些博客/ SO线程建议不同的方法,但没有一个确定的答案。
非常感谢您的任何帮助。
2个回答

10
这是高度主观的。以下是我的意见,我曾编写过几个中等复杂的API。
请注意,HTTP状态码与您的内部组件返回的错误类型不会完全对应。它们并不是为此而设计的。
要遵循的基本规则是200表示OK,其他任何代码都表示错误。
我通常只使用这4个非OK状态码:
400 = 错误请求。调用方发送了无效的请求参数。 401 = 未授权。调用方缺少权限来发出请求。 404 = 未找到。调用方请求了一个无法找到或不存在的资源。 500 = 内部服务器错误。其他所有情况。发生了一些糟糕的事情,调用方可能无能为力。
就我而言,HTTP状态码就是这样。
但我不止于此。我总是返回一个包含自己的错误代码、消息和 - 在测试环境中 - 堆栈跟踪的JSON响应。我的错误代码是调用方可以根据需要编程的数字。就我而言,这才是真正的错误代码。

感谢您的想法,@Mike。我们正在遵循您在此处概述的类似方法。很高兴知道我们正在正确的方向上。 - M22an

-3

这里是最佳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'
        );

1
你为什么只发布HTTP状态码列表?我认为发布文档链接Http状态码文档是一个更好的主意。 - kelgwiin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接