V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
Vegetable
V2EX  ›  Python

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

  •  
  •   Vegetable · 2019-04-09 14:04:51 +08:00 · 3723 次点击
    这是一个创建于 2088 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

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

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

    以及 out_order_no 也放 body 里好了,URL 改成
    https://host/product/out/<CODE>
    感觉这么更舒服.......
    lilpig
        14
    lilpig  
       2019-04-09 17:18:01 +08:00 via Android
    @Vegetable 你说的对,我欠考虑了😂
    jasonyang9
        15
    jasonyang9  
       2019-04-09 17:30:29 +08:00
    记得以前讨论过的,这种写法的语义根本不对
    pmispig
        16
    pmispig  
       2019-04-09 18:00:14 +08:00
    这种多半是 python 开发的
    starsky007
        17
    starsky007  
       2019-04-09 18:14:37 +08:00 via Android
    /company/{}/employees
    Qzier
        18
    Qzier  
       2019-04-09 19:35:05 +08:00 via iPhone
    这不很正常吗?
    baojiweicn2
        19
    baojiweicn2  
       2019-04-09 20:21:11 +08:00 via Android
    楼主少见多怪了,这个接口看上去就像是下单或者支付接口,所有家的支付接口都这样的,至于签名,我都能猜出来大概是 params 按照 ascii 码排列&拼接后面加 key 做 md5。腾讯阿里或者第三方都是这样的,楼主少见多怪了。基本原因是,这种是系统间交互,token 放 header 之类的,多数是前后端交互较多,放 body 的,post 请求较多。这种安全性没问题,交互性容易,还不用反解什么 json,这个在这种场景下才是合理的接口设计
    myquestions
        20
    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)
    xpresslink
        21
    xpresslink  
       2019-04-10 16:07:51 +08:00
    这个很正常,pyhon 的 web 框架比如 django 之类的都有很方便的提取 path 中变量的机制。
    放在 path 中用 get 方式有个好处就是方便缓存。
    Vegetable
        22
    Vegetable  
    OP
       2019-04-11 10:55:13 +08:00
    @myquestions 括号连接字符串和反斜线的效果是一样的.

    @xpresslink 我是惊讶设计,不是技术
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1540 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 17:00 · PVG 01:00 · LAX 09:00 · JFK 12:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.