推荐学习书目
› 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 · Apr 9, 2019 · 4806 views
    This topic created in 2770 days ago, the information mentioned may be changed or developed.

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

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

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

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

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

    不过世界那么大,算了,要调人家接口就照着写吧
    AngryPanda
    AngryPanda
    Apr 9, 2019 via Android
    9
    pathinfo 方式,很常见啊。
    lihongjie0209
    lihongjie0209
    Apr 9, 2019
    10
    就是 restapi 啊
    Luckyray
    Luckyray
    Apr 9, 2019
    11
    传参方式是非常正常的 pathinfo 模式,跟是不是 restful 没关系吧
    shench
    shench
    Apr 9, 2019
    12
    没见过 thinkphp 吗?哈哈~
    boris1993
    boris1993
    Apr 9, 2019 via Android
    13
    有点惊........

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

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

    @xpresslink 我是惊讶设计,不是技术
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   849 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 56ms · UTC 23:56 · PVG 07:56 · LAX 15:56 · JFK 18:56
    ♥ Do have faith in what you're doing.