@elibinary
2016-09-02T04:00:01.000000Z
字数 4788
阅读 1179
未分类
用以创建关联用户,并返回访问凭证。
POST /api/v1/authorizations/register
签名
参数名 | 必填 | 类型 | 说明 |
---|---|---|---|
channel | 是 | string | 用户来源(ali) |
uid | 是 | string | 用户标识 |
deadline | 是 | integer | 签名有效期,如果设置为1小时那么就是当前 datetime 加上一个小时然后转换成 integer |
sign | 是 | string | 签名,生成方式会在下面解释 |
参数名 | 必填 | 类型 | 说明 |
---|---|---|---|
channel | 是 | string | 用户来源(ali) |
uid | 是 | string | 用户标识 |
deadline | 是 | integer | 签名有效期,如果设置为1小时那么就是当前 datetime 加上一个小时然后转换成 integer |
{
"token": "token"
}
{
"errors":
{
"code": 600,
"message": "authenticate parameters failed"
}
}
code | message |
---|---|
600 | authenticate parameters failed |
610 | invalid token |
620 | invalid credential |
630 | authenticate parameters expired |
该接口用来获取访问凭证(token),获取的凭证将用以访问其他数据接口
GET /api/v1/authorizations/credential
签名
参数名 | 必填 | 类型 | 说明 |
---|---|---|---|
sign | 是 | string | 签名,生成方式会在下面解释 |
参数名 | 必填 | 类型 | 说明 |
---|---|---|---|
channel | 是 | string | 用户来源(ali) |
uid | 是 | string | 用户标识 |
deadline | 是 | integer | 签名有效期,如果设置为1小时那么就是当前 datetime 加上一个小时然后转换成 integer |
{
"token": "token"
}
{
"errors":
{
"code": 600,
"message": "authenticate parameters failed"
}
}
code | message |
---|---|
600 | authenticate parameters failed |
610 | invalid token |
620 | invalid credential |
630 | authenticate parameters expired |
params_json = {
channel: 'ali',
uid: 'uid01',
deadline: 1472035567
}
encoded_params = Base64.urlsafe_encode64(params_json.to_json)
# 编码后的值为: 'eyJjaGFubmVsIjoiYWxpIiwidWlkIjoidWlkMDEiLCJkZWFkbGluZSI6MTQ3MjAzNTU2N30='
# 先把 app_key 和 encoded_params 拼接起来: app_key + encoded_params
# 然后对其进行签名
init_sign = hmac_sha1(secret_key, app_key + encoded_params)
# 签名之后的值:'<\xD8\x8A\n<~\xF7\xF6.W\xB7\xBCm\bts\xFE((\xCA'
encoded_sign = Base64.urlsafe_encode64(init_sign)
# 编码后的值为:'PNiKCjx-9_YuV7e8bQh0c_4oKMo='
# app_key + ':' + encoded_sign + ':' + 'encoded_params'
sign = 'APP_KEY:PNiKCjx-9_YuV7e8bQh0c_4oKMo=:eyJjaGFubmVsIjoiYWxpIiwidWlkIjoidWlkMDEiLCJkZWFkbGluZSI6MTQ3MjAzNTU2N30='
请注意其中的 deadline 参数,此签名只在该有效期之前有效。
用以上传或修改用户资料(身高,体重,性别等信息)
POST /api/v1/profiles
访问凭证
参数名 | 必填 | 类型 | 说明 |
---|---|---|---|
token | 是 | string | 访问凭证(通过认证接口获得) |
height | 否 | float | 用户身高信息 |
weight | 否 | float | 用户体重信息 |
target_weight | 否 | float | 用户目标体重信息(想要达到的体重目标) |
target_date | 否 | date | 用户预计在哪一天达到目标体重(日期如 '2016-08-31') |
birthday | 否 | date | 用户出生日期 |
sex | 否 | string | 用户性别信息(可选范围: male/female) |
diseases | 否 | string | 用户疾病信息(规格及格式见下方注解) |
value | description |
---|---|
1 | 甲减 |
2 | 月经失调 |
3 | 代谢紊乱 |
4 | 没有 |
5 | 哺乳期 |
6 | 运动损伤 |
7 | 便秘 |
diseases 如果有多个则用 ',' 隔开,例子: "1,3,6"
{ }
{
"errors":
{
"code": 610,
"message": "invalid token"
}
}
用以获取一周的饮食计划信息,这里的一周指从当前周的起始(周日)到当前周的结束(周六)共七天
GET /api/v1/user_diets
访问凭证
参数名 | 必填 | 类型 | 说明 |
---|---|---|---|
token | 是 | string | 访问凭证(通过认证接口获得) |
{
"data": [
{
"date": "2016-08-28",
"menu": [
{
"set_type": "breakfast",
"details": [
{
"name": "国光苹果",
"amount": 2,
"unit": "个",
"image_url": "http://7xrnmu.com1.z0.glb.clouddn.com/house/food_mid/m_guoguangpingguo.jpg",
"code": "guoguangpingguo",
"calory": 168,
"unit_id": 152
},
{
"name": "牛奶",
"amount": 1,
"unit": "杯",
"image_url": "http://7xrnmu.com1.z0.glb.clouddn.com/house/food_mid/m_1160989087812.jpg",
"code": "niuru_junzhi",
"calory": 108,
"unit_id": 150
}
],
"calory": 276
},
{
"set_type": "lunch",
"details": [
{...}
],
"calory": 454
},
{
"set_type": "extra_meal",
"details": [
{...}
],
"calory": 144
},
{
"set_type": "dinner",
"details": [
{...}
],
"calory": 332
}
]
},
{
"date": "2016-08-29",
"menu": [...]
},
{
"date": "2016-08-30",
"menu": [...]
},
{
"date": "2016-08-31",
"menu": [...]
},
{
"date": "2016-09-01",
"menu": [...]
},
{
"date": "2016-09-02",
"menu": [...]
},
{
"date": "2016-09-03",
"menu": [...]
}
]
}
字段名称 | 说明 |
---|---|
data | array 类型,其中共有7个元素,分别为一周七天的饮食计划数据 |
date | 饮食计划的具体日期,每天饮食计划结构必存在的元素 |
menu | array 类型,其中元素为包括加餐在内的一日四餐的具体菜单信息,实际返回可能缺少某餐或某几餐,其元素数量为 0 ~ 4 个 |
set_type | 具体某一餐的餐别,可选值 ['breakfast', 'lunch', 'extra_meal', 'dinner'],分别为早餐、午饭、加餐和晚餐 |
details | array 类型,菜单中菜品的具体内容信息,其中每个元素为一样菜品 |
name | 菜品名字 |
amount | 菜品数量 |
unit | 菜品单位 |
image_url | 菜品的示例图片 |
code | 菜品的标识码 |
unit_id | 菜品单位的标识码 |
calory (details 内的) | 本次食用本菜品共摄入的热量,本数值为 数量*单位热量 |
calory (details 平级的) | 当前一餐的总热量 |
上面示例结构中重复部分均略写,以 '...' 代写
{
"errors":
{
"code": 610,
"message": "invalid token"
}
}
用以根据关键字搜索食物,返回简要数据列表
POST(GET) /api/v1/foods/search
访问凭证
参数名 | 必填 | 类型 | 说明 |
---|---|---|---|
q | 是 | string | 查询关键字(最长100个字符),示例: '苹果' |
page | 否 | int | 返回指定页的结果,如不填写默认取第 1 页 |
per | 否 | int | 指定每页返回数据的数量(最大 30),如不填写默认每页 20 条 |
{
"page": 1,
"total_pages": 257,
"foods": [
{
"id": 469,
"code": "pingguo_junzhi",
"name": "苹果",
"thumb_image_url": "http://s.boohee.cn/house/food_mid/mid_photo_2015126214658469.jpg",
"is_liquid": false,
"health_light": 1,
"weight": "100",
"calory": "54"
},
{
"id": 481,
"code": "qingxiangjiaopingguo",
"name": "青香蕉苹果",
"thumb_image_url": "http://s.boohee.cn/house/food_mid/mid_photo_20152493717481.jpg",
"is_liquid": false,
"health_light": 1,
"weight": "100",
"calory": "52"
},
...
{
"id": 501,
"code": "pingguoli",
"name": "苹果梨",
"thumb_image_url": "http://s.boohee.cn/house/food_mid/m_pingguoli.jpg",
"is_liquid": false,
"health_light": 1,
"weight": "100",
"calory": "53"
}
]
}
{
page: 1,
total_pages: 0,
items: []
}
字段名称 | 说明 |
---|---|
page | 表示当前页数 |
total_pages | 是总页数,默认每页返回 20 条数据 |
items | array 类型,其中元素为查询结果集 |
code | 食物标识 |
name | 食物名称 |
thumb_image_url | 食物的示例图片 |
weight | 食物单位数量(主要衡量热量) |
calory | 食物单位数量的热量 |
is_liquid | boolean 类型,标记该食物是否是液体 |
health_light | int 类型,健康指数,0 没灯、 1 绿灯、 2 黄灯、 3 红灯,从绿到红依次表示从适合减肥到不适合减肥 |