REST API

版本

版本控制

新API路由和老API路由都是相同的路由前缀。如果在header里增加Accept参数,值为application/vnd.edusoho.v2+json,将会访问新接口。如果不加,默认访问老接口。

排序

一些接口提供对结果排序,在请求URL上使用sort参数即可,这个参数使用逗号分隔多个排序字段,默认排序是按照创建时间倒序

field表示按照field字段正排-field表示按照field字段倒排

比如说,要获取学员最多,并且点击量最多的课程:

  1. GET /course_sets?sort=-studentNum,-hitNum

响应

服务器端API程序能返回的响应,HTTP状态码均应为200。非200的请求,均为异常请求,比如:API服务器宕机、服务内部错误、网络异常等。

成功响应

单个资源的获取、创建、更新,应响应完整的资源结构体,比如创建或更新一个用户后应返回完整的用户结构体

  1. {
  2. "id": 1,
  3. "username": "admin",
  4. "email": "admin@example.com",
  5. "createdTime": "2016-09-21T00:27:47+08:00"
  6. }

资源结构体中的key的命名采用驼峰规则

如果某个key表示时间,那么应返回ISO 8601格式标准的时间

获取多个资源的请求,有分页的应响应如下结构体,我们称此类结构为pagedlist

  1. {
  2. "data": [
  3. {"key1": "value1", "key2": "value2"},
  4. {"key1": "value1", "key2": "value2"},
  5. {"key1": "value1", "key2": "value2"}
  6. ],
  7. "paging": {
  8. "total": 100,
  9. "offset": 50,
  10. "limit": 10
  11. }
  12. }

total表示总共有多少个资源,offset表示本次响应返回的结果集是从第几个资源起的序号,limit表次本次响应返回的结果集最大个行数。

无分页的应响应如下结构体,我们称此类结构为list

  1. [
  2. {"key1": "value1", "key2": "value2"},
  3. {"key1": "value1", "key2": "value2"},
  4. {"key1": "value1", "key2": "value2"}
  5. ]

失败响应

API请求操作失败应返回如下的结构体,我们称此类结构体为Error结构体

  1. {
  2. "error": {
  3. "message" : "错误描述信息。",
  4. "code": "错误码(值为整形)"
  5. }
  6. }

错误码有

CodeTypeDescriptionHTTP Code
1API_NOT_FOUNDAPI不存在404
2BAD_REQUEST请求报文格式不正确:1.请求体非json格式2.未设置application/json头部400
3API_TOO_MANY_CALLSAPI访问次数过多429
4INVALID_CREDENTIALCredential不正确:1.Credential格式不正确 2. Credential签名不正确401
5EXPIRED_CREDENTIALCredential已过期401
6BANNED_CREDENTIALCredential对应的用户被禁止401
7INTERNAL_SERVER_ERROR服务内部错误,需联系管理员500
8SERVICE_UNAVAILABLE服务暂时下线,请稍后重试:1.升级维护中2.过载保护中3.内部服务处理超时503
9INVALID_ARGUMENT参数缺失、参数不正确400
10RESOURCE_NOT_FOUND访问的资源不存在404
11UNAUTHORIZED用户没有被认证401
12METHOD_NOT_ALLOWED请求方法不被允许405

封装

如果你的 API 客户端访问 HTTP 状态码和 HTTP 头比较困难, 你可以在 url 上加一个 envelope=true 的参数,这样做的了之后, HTTP 状态码都是 200 的,并且所有返回信息都会封装成一个对象返回。

  1. GET /api/users/does-not-exist?envelope=true
  2. {
  3. "status": 404,
  4. "headers": {
  5. },
  6. "response": {
  7. "error": {
  8. "message": "API Resource Not found",
  9. "code": 2
  10. }
  11. }
  12. }