对于 restfulAPI,一般如何选择交换数据的格式呢?

2015-09-17 08:31:19 +08:00
 temberature
主要想请教类似 a=1&b=2 和{ a : 1 , b : 2 }这两种的区别
10908 次点击
所在节点    程序员
64 条回复
hantsy
2015-09-17 11:12:24 +08:00
@temberature 我上面两个链接的例子中 UI 全部是 SPA 。
gamexg
2015-09-17 11:28:38 +08:00
直接 command_json , sign 。

a=1&b=2 这种做 hash 签名容易被坑死。
temberature
2015-09-17 11:48:05 +08:00
@gamexg 没太明白,能再具体解释下吗:)
loading
2015-09-17 11:56:21 +08:00
如果省流量你考虑进去,这问题就没必要讨论了。
hash 你后面掉坑就知道了。
temberature
2015-09-17 12:08:29 +08:00
@loading 清楚利弊,在具体情况下就好取舍了吧;能描述下这个坑的大小、颜色、气味吗?以免掉下水道里,哈哈~
gamexg
2015-09-17 12:31:24 +08:00
比如一些 http 请求为了安全需要做 hash 签名, a=1&b=2 这种签名会碰到很多坑。

看一下这个 hash 签名设计:
https://blog.yanke.io/she-ji-yi-tao-ji-yu-hash-qian-ming-yan-zheng-de-api/

```
因此我初步设计了一个签名机制,步骤如下:

将时间戳,随机串, TokenID ,和业务逻辑关键参数构成一个字典
将字典按照 Key 升序排序,然后按照 key1 value1 key2 value2 拼成一个连续字符串
将 Path 拼在前面, Token 拼在后面
将整个字符串做 SHA256 ,作为一个参数放回到请求中
服务器端接收到请求的时候也进行同样的处理,进行签名验证。

如果你曾经裸写过常见的第三方服务 API 调用的话,你会对这些步骤非常熟悉。
```

如果直接传递 json 字符串,直接 hash json 字符串即可,不用麻烦的拼接了。
temberature
2015-09-17 12:47:19 +08:00
@gamexg 只理解到处理方式的差别,没看到坑
wangleineo
2015-09-17 12:48:48 +08:00
还是统一用 JSON 好些吧,用 Form 提交的话,多层数据怎么办?
FrankFang128
2015-09-17 12:49:53 +08:00
都支持就好了
temberature
2015-09-17 12:55:41 +08:00
@FrankFang128 这样只是把问题抛给了调用接口方吧
hantsy
2015-09-17 12:56:33 +08:00
@gamexg 难道不用 HTTPS 吗?签名这东西,看着就吐,根本谈不上安全,如果你的 Token 被截取(没 HTTPS 所有数据传输都透明), Hacker 构造你这样顺序的签名有什么难的。这也是 oAuth2 去掉了签名,强制使用 HTTPS 的原因。
marginleft
2015-09-17 12:59:30 +08:00
pandada8
2015-09-17 13:00:14 +08:00
不是取决于 Accept 头的么……
pandada8
2015-09-17 13:04:40 +08:00
@pandada8 哦没看清附言……
主要看你的 spa 框架……比如 angular 默认 post 是 json ……
总之怎么方便怎么来
iyaozhen
2015-09-17 13:20:46 +08:00
这个取决于你的操作吧。 GET 获取数据,可以用 urlencode 传参。 POST 用于更改数据,传 json 更合适吧。
temberature
2015-09-17 13:38:39 +08:00
@pandada8 如果接口是不同的人在写,那还要看是谁方便,有一套参考的规范会更好吧
aftereclipse
2015-09-17 13:41:51 +08:00
统一 HTTP POST , json 数据格式,客户端和服务端都好写,加解密也好做
vainly
2015-09-17 14:04:11 +08:00
@matthewgao 不是啊,对于指定参数的 GET 请求时这么做的。
比如这样:
@GET
@Path ("findById")
public String findById (@QueryParam ("id")String id );
temberature
2015-09-17 14:09:02 +08:00
@vainly 没看懂,╮(╯▽╰)╭
pandada8
2015-09-17 14:26:06 +08:00
@temberature 最后当然要统一了……之前先做好协定。
比如有 angular,superagent 之类的场合我倾向于使用 json
有些时候框架搭配用 jquery 发请求那就用 form-urlencoded.
总体而言就是怎么方便怎么来
————
实在决定不了么
来局昆特牌吧

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/221304

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX