## 错误处理
在调用接口的过程中,可能出现下列几种错误情况:
* 服务器维护中,`503` 状态码
~~~
HTTP/1.1 503 Service Unavailable
Retry-After: 3600
Content-Length: 41
{"message": "Service In the maintenance"}
~~~
* 发送了无法转化的请求体,`400` 状态码
~~~
HTTP/1.1 400 Bad Request
Content-Length: 35
{"message": "Problems parsing JSON"}
~~~
* 服务到期(比如付费的增值服务等), `403` 状态码
~~~
HTTP/1.1 403 Forbidden
Content-Length: 29
{"message": "Service expired"}
~~~
* 因为某些原因不允许访问(比如被 ban ),`403` 状态码
~~~
HTTP/1.1 403 Forbidden
Content-Length: 29
{"message": "Account blocked"}
~~~
* 权限不够,`403` 状态码
~~~
HTTP/1.1 403 Forbidden
Content-Length: 31
{"message": "Permission denied"}
~~~
* 需要修改的资源不存在, `404` 状态码
~~~
HTTP/1.1 404 Not Found
Content-Length: 32
{"message": "Resource not found"}
~~~
* 缺少了必要的头信息,`428` 状态码
~~~
HTTP/1.1 428 Precondition Required
Content-Length: 35
{"message": "Header User-Agent is required"}
~~~
* 发送了非法的资源,`422` 状态码
~~~
HTTP/1.1 422 Unprocessable Entity
Content-Length: 149
{
"message": "Validation Failed",
"errors": [
{
"resource": "Issue",
"field": "title",
"code": "missing_field"
}
]
}
~~~
所有的 `error` 哈希表都有 `resource`, `field`, `code` 字段,以便于定位错误,`code` 字段则用于表示错误类型:
* `missing`: 说明某个字段的值代表的资源不存在
* `invalid`: 某个字段的值非法,接口文档中会提供相应的信息
* `missing_field`: 缺失某个必须的字段
* `already_exist`: 发送的资源中的某个字段的值和服务器中已有的某个资源冲突,常见于某些值全局唯一的字段,比如 @ 用的用户名(这个错误我有纠结,因为其实有 409 状态码可以表示,但是在修改某个资源时,很一般显然请求中不止是一种错误,如果是 409 的话,多种错误的场景就不合适了)