需要实现基于 HTTP/JSON 的 RESTful API,至少包含以下接口:
除登录接口外,其他接口需要传入登录接口得到的 access_token,access_token 无效或者为空会直接返回401异常:
401 Unauthorized
{
"code": "INVALID_ACCESS_TOKEN",
"message": "无效的令牌"
}
其中后台接口只有用 root 用户登录后的 access_token 才能访问。
其中 access_token 需要支持: parameter 和 http header 两种认证方式。客户端提供其中一个即可通过认证。
# by parameter
GET /foods?access_token=xxx
# by http header
GET /foods Access-Token:xxx
如果需要传参的接口,传过来的 body 为空。则返回400异常:
400 Bad Request
{
"code": "EMPTY_REQUEST",
"message": "请求体为空"
}
如果需要传参的接口,传过来的请求体 json 格式有误。则返回 400 异常:
400 Bad Request
{
"code": "MALFORMED_JSON",
"message": "格式错误"
}
POST /login
参数名 | 类型 | 描述 |
---|---|---|
username | string | 用户名 |
password | string | 密码 |
POST /login
{
"username": "robot",
"password": "robot"
}
200 OK
{
"user_id": 1,
"username": "robot",
"access_token": "xxx"
}
用户名不存在或者密码错误:
403 Forbidden
{
"code": "USER_AUTH_FAIL",
"message": "用户名或密码错误"
}
GET /foods
GET /foods?access_token=xxx
200 OK
[
{"id": 1, "price": 12, "stock": 99},
{"id": 2, "price": 10, "stock": 89},
{"id": 3, "price": 22, "stock": 91}
]
POST /carts
POST /carts?access_token=xxx
200 OK
{
"cart_id ": "e0c68eb96bd8495dbb8fcd8e86fc48a3"
}
PATCH /carts/:cart_id
参数名 | 类型 | 描述 |
---|---|---|
food_id | int | 添加的食物id |
count | int | 添加的食物数量 |
PATCH /carts/e0c68eb96bd8495dbb8fcd8e86fc48a3?access_token=xxx
{
"food_id": 2,
"count": 1
}
204 No content
篮子不存在:
404 Not Found
{
"code": "CART_NOT_FOUND",
"message": "篮子不存在"
}
篮子不属于当前用户:
401 Unauthorized
{
"code": "NOT_AUTHORIZED_TO_ACCESS_CART",
"message": "无权限访问指定的篮子"
}
食物数量超过篮子最大限制:
403 Forbidden
{
"code": "FOOD_OUT_OF_LIMIT",
"message": "篮子中食物数量超过了三个"
}
食物不存在:
404 Not Found
{
"code": "FOOD_NOT_FOUND",
"message": "食物不存在"
}
POST /orders
参数名 | 类型 | 描述 |
---|---|---|
cart_id | string | 篮子id |
POST /orders?access_token=xxx
{
"cart_id": "e0c68eb96bd8495dbb8fcd8e86fc48a3"
}
200 OK
{
"id ": "someorderid"
}
篮子不存在
404 Not Found
{
"code": "CART_NOT_FOUND",
"message": "篮子不存在"
}
篮子不属于当前用户
401 Unauthorized
{
"code": "NOT_AUTHORIZED_TO_ACCESS_CART",
"message": "无权限访问指定的篮子"
}
食物库存不足:
403 Forbidden
{
"code": "FOOD_OUT_OF_STOCK",
"message": "食物库存不足"
}
超过下单次数限制
403 Forbidden
{
"code": "ORDER_OUT_OF_LIMIT",
"message": "每个用户只能下一单"
}
GET /orders?access_token=xxx
200 OK
[
{
"id": "someorderid",
"items": [
{"food_id": 2, "count": 1}
],
"total": 10
}
]
GET /admin/orders?access_token=xxx
200 OK
[
{
"id": "someorderid",
"user_id": 1,
"items": [
{"food_id": 2, "count": 1}
],
"total": 10
}
]