host/key1/value1/key2/value2/key3/value3 这种传参方式你们见过吗

2019-04-09 14:04:51 +08:00
 Vegetable

今天接一个三方服务,我看到这个 url 瞬间就有点惊到了.

url = ("https://host"
"/pubkey/{}"
"/product_code/{}"
"/out_order_no/{}"
"/signature/{}").format(public_key, product_code, tradeno, sign)

效果大概就是这样的. 真是第一次见这种,哦对了,这是一个JSON格式的POST请求,body 部分是另一个参数.签名的算法也挺特别,就不说了,毕竟签名算法奇葩一点更安全一些...

我现在觉得自己真是见识太少.

3556 次点击
所在节点    Python
22 条回复
dovme
2019-04-09 14:08:21 +08:00
还好吧。
gz911122
2019-04-09 14:09:43 +08:00
见过啊
github 的 api 不就这样的
lilpig
2019-04-09 14:10:12 +08:00
这不是 restfulapi 嘛
MeteorCat
2019-04-09 14:12:18 +08:00
这种好像是 path info 类型的传参方式,我记得以前好像某些支付跳转、回调不允许带有 url 参数,只能这样来伪装成伪静态来处理
murmur
2019-04-09 14:14:06 +08:00
极致的 restful
westoy
2019-04-09 14:18:08 +08:00
这不是 restful 啊, 就是通过 pathinfo 一层层映射 controller 和 action 还有参数, php 框架里默认映射出现的比较多, python 里豆瓣用的 quixote 也是这种
Vegetable
2019-04-09 14:20:08 +08:00
@murmur
@lilpig
@gz911122
restful 签名和 key 怎么的也不能放 url 吧...这里我唯一认可的就是 product 字段可以放在 url 里,起码算是一种资源,其他的三个都不是很恰当吧
hlwjia
2019-04-09 14:23:38 +08:00
@Vegetable 同意的。

不过世界那么大,算了,要调人家接口就照着写吧
AngryPanda
2019-04-09 14:24:46 +08:00
pathinfo 方式,很常见啊。
lihongjie0209
2019-04-09 14:29:44 +08:00
就是 restapi 啊
Luckyray
2019-04-09 14:30:15 +08:00
传参方式是非常正常的 pathinfo 模式,跟是不是 restful 没关系吧
shench
2019-04-09 14:42:01 +08:00
没见过 thinkphp 吗?哈哈~
boris1993
2019-04-09 14:52:49 +08:00
有点惊........

pubkey 和 signature 放 header 里或者 body 里不好么......

以及 out_order_no 也放 body 里好了,URL 改成
https://host/product/out/<CODE>
感觉这么更舒服.......
lilpig
2019-04-09 17:18:01 +08:00
@Vegetable 你说的对,我欠考虑了😂
jasonyang9
2019-04-09 17:30:29 +08:00
记得以前讨论过的,这种写法的语义根本不对
pmispig
2019-04-09 18:00:14 +08:00
这种多半是 python 开发的
starsky007
2019-04-09 18:14:37 +08:00
/company/{}/employees
Qzier
2019-04-09 19:35:05 +08:00
这不很正常吗?
baojiweicn2
2019-04-09 20:21:11 +08:00
楼主少见多怪了,这个接口看上去就像是下单或者支付接口,所有家的支付接口都这样的,至于签名,我都能猜出来大概是 params 按照 ascii 码排列&拼接后面加 key 做 md5。腾讯阿里或者第三方都是这样的,楼主少见多怪了。基本原因是,这种是系统间交互,token 放 header 之类的,多数是前后端交互较多,放 body 的,post 请求较多。这种安全性没问题,交互性容易,还不用反解什么 json,这个在这种场景下才是合理的接口设计
myquestions
2019-04-10 09:12:28 +08:00
如果是 Python 的话 应该是这样的 url = "https://host" \
"/pubkey/{}"\
"/product_code/{}"\
"/out_order_no/{}"\
"/signature/{}".format(public_key, product_code, tradeno, sign)

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

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

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

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

© 2021 V2EX