REST API Http状态代码最佳实践

时间:2017-04-25 05:28:28

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

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

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

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

非常感谢任何帮助。

3 个答案:

答案 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)

最有用的请求状态代码:

  • 代码100:信息
  • 代码200:成功
  • 代码300:重定向
  • 代码400:客户端错误
  • 代码500:服务器错误