api接口的调用问题?

码小蛋 JAVA开发工程师  2017-11-04 09:39:13
由于公司业务需求,需要往客户公司的接口上提交数据,客户公司提供了一套api:大概内容是:

API 采用 REST 风格设计。所有接口请求地址都是可预期的以及面向资源的。使用规范的 HTTP 响应代码来表示请求结果的正确或错误信息。使用 HTTP 内置的特性,如 HTTP Authentication 和 HTTP 请求方法让接口易于理解。所有的 API 请求都会以规范友好的 JSON 对象格式返回(包括错误信息)

请求头
所有请求需要使用自定义返回类型

Content-Type: application/vnd.api+json
x-dd-app: foo
x-dd-key: key
Authorization: Bearer token

token 为 JWT 加密后的 token

认证
访问 API 需要在 Headers 中加入以下内容,请用自己实际 app 和 key 进行替换. token 遵循 JWT Web Tokens 采用以下方式进行加密。 secret 为额外签发的密钥。请不要加入 header 中。

HMACSHA256(
base64UrlEncode({
"alg": "HS256",
"typ": "JWT"
}) + "." +
base64UrlEncode({
"iss": "x-app-key",
"sub": "请求的 api 路径, 不包含第一个斜杠"
}),
secret)

fleetdata
数据统计
Example Request

curl 'https://api.ddicar.com/v1/fleetdata' \
-H 'Content-Type: application/vnd.api+json' -H 'x-dd-app: foo' -H 'x-dd-key: key' -H 'x-access-token: token' \
--request POST \
-d $'
{
"vendor": "0339c1c0-8619-11e6-b76d-8d4dac724b11",
"date": "2017-04-31T12:00:00Z",
"details": [
{
"imei": "0339c1c0-8619-11e6-b76d-8d4dac724b11",
"date": "2017-04-31T12:00:00Z",
"lon": 0,
"lat": 0,
"alt": 0,
"ang": 0,
"v": 0,
"dv": 0,
"xAcc": 0,
"yAcc": 0,
"zAcc": 0,
"event": "1",
"eStat": "1",
"rpm": 0,
"wTemp": 0,
"rFuel": 0,
"tFuel": 0,
"dFuel": 0,
"odometer": 0,
"vin": "0",
"plate": "0",
"lv": 0,
"throttle": 0,
"gear": "-1",
"ert": 0,
"ext": {
"key": "foo",
"value": "foo"
}
}
]
}
'
上报数据
POST /fleetdata

Request Attributes
vendor
string (required) Example: 0339c1c0-8619-11e6-b76d-8d4dac724b11
标示
date
string (required) Example: 2017-04-31T12:00:00Z
iSO8601 time format
details
array (required)
details[].imei
string (required) Example: 0339c1c0-8619-11e6-b76d-8d4dac724b11
标示
details[].date
string (required) Example: 2017-04-31T12:00:00Z
iSO8601 time format
details[].lon
number (required) Example: 0
经度, 范围 -180 到 180 单位:度
details[].lat
number (required) Example: 0
纬度, 范围 -90 到 90 单位:度
details[].alt
number (required) Example: 0
海拔 单位:米
details[].ang
number (required) Example: 0
GPS航向角 单位:度
details[].v
number (required) Example: 0
GPS速度 单位:km/h
details[].dv
number (optional) Example: 0
设备速度 单位:km/h
details[].xAcc
number (optional) Example: 0
横向加速度 单位:G
details[].yAcc
number (optional) Example: 0
纵向加速度 单位:G
details[].zAcc
number (optional) Example: 0
垂直加速度 单位:G
details[].event
string (optional) Example: 1
事件
details[].eStat
string (optional) Example: 1
Choices: 1 2 3
1:事件开始 2:事件中 3:事件结束
details[].rpm
number (optional) Example: 0
发动机转速 单位:r/m
details[].wTemp
number (optional) Example: 0
发动机水温 单位:度
details[].rFuel
number (optional) Example: 0
剩余油量, 范围 0 到 100 单位:%
details[].tFuel
number (optional) Example: 0
行程总油耗 单位:L
details[].dFuel
number (optional) Example: 0
瞬时油耗 单位:l/h
details[].odometer
number (optional) Example: 0
里程 单位:km
details[].vin
string (optional) Example: 0
车架号
details[].plate
string (optional) Example: 0
车牌号
details[].lv
number (optional) Example: 0
发动机载荷, 范围 0 到 100 单位:%
details[].throttle
number (optional) Example: 0
油门相对位置, 范围 0 到 100 单位:%
details[].gear
string (optional) Example: -1
Choices: -1 0 1 2 3 4 5 6 P R N D S
档位, -1[倒挡]、0[空挡]、1、2、3、4、5、6; 自动挡:P、R、N、D、S
details[].ert
number (optional) Example: 0
发动机运行时间 单位:h
details[].ext
object
其他自有字段
details[].ext.key
string (optional) Example: foo
details[].ext.value
string (optional) Example: foo

HTTP 返回状态码
Error Code Meaning
200 OK – 一切正常。
400 Bad Request – 一般由缺失参数,参数格式不正确等引起。
401 Unauthorized – 没有提供正确的 API Key。
403 Forbidden – 超过当前 API Key 请求限制,或者没有相关权限。
404 Not Found – 请求的资源不存在。
500, 502, 503, 504 Internal Server Error – 服务器出错。

问题是:需要的数据都有,可是我应该怎么把数据提交到这个接口上面去呢?求大神带,刚入行小白求指导
...全文
589 1 点赞 打赏 收藏 举报
写回复
1 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
hookee 2017-11-06
数据按上面的要求组成 json格式,就是例子中-d $' ... '里面 那样。 POST递交的话用相关语言的 HTTP Client工具 递交的url是 fleetdata 设置下HTTP头 Content-Type: application/vnd.api+json x-dd-app: foo 这里foo不知道是什么,应该是给你们的 x-dd-key: key 这里是给的密钥 Authorization: 这里是JWT token JWT的话查 http://jwt.io ,有第三方API可以直接用的 自己写的话 base64UrlEncode 是 base64变种, 替换了+/ 为-_ JWT包含三部分: header payload 和 签名,中间用. 连接(紧凑格式下) 你的需求里 header 是 { "alg": "HS256", "typ": "JWT" } payload 是 { "iss": "x-app-key", "sub": "请求的 api 路径, 不包含第一个斜杠" } 先把 header和payload 分别做一下 base64url编码 然后 把编码后的两部分用.连接起来得到一个字符串,假设是s 再把得到的s 用给的key做一下HMAC SHA256哈希(一般语言都会有这种算法库的,调用就行了),得到的就是 JWT token 用HTTP Client工具 设置完上面的HTTP头后,把JSON格式的数据POST到上述url上去就行了.
  • 打赏
  • 举报
回复
相关推荐
发帖
Web开发应用服务器
加入

5610

社区成员

Web开发应用服务器相关讨论专区
申请成为版主
帖子事件
创建了帖子
2017-11-04 09:39
社区公告
暂无公告