【问题标题】:REST API Http status code best practicesREST API Http 状态码最佳实践
【发布时间】:2017-04-25 05:28:28
【问题描述】:

我们正在编写一个 REST API,该 API 将公开并被许多第三方开发人员使用。我正在研究 http 状态代码的最佳实践,尤其是在错误情况下。

我们的应用程序内部有许多以 API 为接口的组件。如果内部组件有任何错误,我应该返回 500 并带有适当的错误消息吗?

在浏览 SO 时,我发现了一些博客/SO 主题,它们提出了不同的方法,但没有一个给出具体的答案。

非常感谢您对此的任何帮助。

【问题讨论】:

    标签: rest asp.net-web-api asp.net-web-api2


    【解决方案1】:

    这是非常主观的。这是我写过几个中等复杂的 API 的意见。

    请意识到 HTTP 状态代码不会准确地映射到您的内部组件将返回的错误类型。他们不是设计来的。

    要遵循的基本规则是 200 是可以的,其他都是错误。

    我基本上只使用这 4 个非 OK 状态代码:

    400 = 错误请求。调用者发送了无效的请求参数。 401 = 未经授权。调用者没有发出请求的权限。 404 = 未找到。调用者请求的资源无法找到或不存在。 500 = 内部服务器错误。其他一切。发生了一些不好的事情,调用者可能对它无能为力。

    就我而言,这就是 HTTP 状态代码。

    但我不会止步于此。我总是返回一个 JSON 响应,其中包含我自己的错误代码、消息以及——在测试环境中——堆栈跟踪。我的错误代码是调用者可以根据需要对其进行编程的数字。就我而言,这是真正的错误代码。

    【讨论】:

    • 感谢您的想法@Mike。我们正在采用与您在此处概述的方法类似的方法。很高兴知道我们的方向是正确的。
    【解决方案2】:

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

    【讨论】:

    猜你喜欢
    • 2013-10-23
    • 2020-05-29
    • 1970-01-01
    • 2018-04-27
    • 1970-01-01
    • 2018-05-25
    • 2020-04-23
    • 1970-01-01
    相关资源
    最近更新 更多