首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python 学习手册
Python Cookbook
Python 基础教程
Python Sites
PyPI - Python Package Index
http://www.simple-is-better.com/
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 · 283 天前 · 2589 次点击
    这是一个创建于 283 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

    @xpresslink 我是惊讶设计,不是技术
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2500 人在线   最高记录 5168   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 45ms · UTC 14:36 · PVG 22:36 · LAX 06:36 · JFK 09:36
    ♥ Do have faith in what you're doing.