给客户端提供的接口,比如修改用户信息这种在 path 中使用用户 id 这种设计可取吗? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
meshell
V2EX    程序员

给客户端提供的接口,比如修改用户信息这种在 path 中使用用户 id 这种设计可取吗?

  •  
  •   meshell 2021 年 6 月 1 日 2275 次点击
    这是一个创建于 1714 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如题比如 /user/1/update/info /user/1/modify/password

    如果使用,在程序中是否还要判断 id 和 session 的 id 是否相等,还是不判断直接使用 session id 。只是作为一个 url 语义化.

    13 条回复    2021-06-01 23:16:54 +08:00
    basefas
        1
    basefas  
       2021 年 6 月 1 日
    不需要,只需要判断是否有权限即可,比如一个系统中管理员可以改所有人的信息,此时就不能判断 user id 和 session 里的 id 是否一致
    Mitt
        2
    Mitt  
       2021 年 6 月 1 日
    RESTful 是不把动词放路径里, 比如修改自己的 profile PUT /user/profile 或者 PATCH 这类的代替 /update/ 这个 path 同样如果是指定修改密码 /user/1/password 就可以了,但其实可以省略 /password 直接 PATCH 或者 PUT /user/1 就好了,鉴权的话该怎么鉴还是怎么鉴,如果只是改自己的信息,我就建议直接省略用户 ID
    IvanLi127
        3
    IvanLi127  
       2021 年 6 月 1 日
    我的习惯是会要求在 url 上提供这个 id,因为接口也可能由管理员角色调用到。url 中取到的 id 会再和 session id 以及当前用户权限一起判断,这次请求是否合法。

    如果不判断的话,调用方用的时候,发现能传其他 id 进来,结果改的信息还是自己的,这不就是两个 bug 嘛!
    Godykc
        4
    Godykc  
       2021 年 6 月 1 日
    不是对外接口就没啥问题,如果是对外接口,那潜台词就是可以通过这个接口得知你们公司的用户规模
    meshell
        5
    meshell  
    OP
       2021 年 6 月 1 日
    @Godykc 是的
    meshell
        6
    meshell  
    OP
       2021 年 6 月 1 日
    @Mitt 不是后台,只是手机客户端。
    meshell
        7
    meshell  
    OP
       2021 年 6 月 1 日
    @Godykc 其实接口里面也会返回 用户 id ,以前弄得都是跳断的 uid 。不是完全自增的。
    meshell
        8
    meshell  
    OP
       2021 年 6 月 1 日
    @Mitt 主要是针对手机客户端
    meshell
        9
    meshell  
    OP
       2021 年 6 月 1 日
    @IvanLi127 针对手机的,其实代码没有用 这个 path 参数 . .. //doge
    IvanLi127
        10
    IvanLi127  
       2021 年 6 月 1 日
    @meshell 如果不可能用到,建议去掉,反正你这个也不是 RESTful,自己规范好风格就行。或者 1 可以用其他词替代呀,比如 self,my 什么什么的。不然这个参数就显得很多余了,说不定会被喷不专业,居然要调用方传
    meshell
        11
    meshell  
    OP
       2021 年 6 月 1 日
    @IvanLi127 哈哈,目前已经去掉了,其实我就想调试的时候知道别人的 uid 是多少。。。省得去问。。
    Mitt
        12
    Mitt  
       2021 年 6 月 1 日
    @meshell #8 RESTful API 也是一样的 不一定非要网页访问才这么设计
    tomkliyes
        13
    tomkliyes  
       2021 年 6 月 1 日
    不建议把用户 id 放在 path 中,如果是修改自己的信息,可以直接从 session 中取,如果是(管理员)修改他人信息,可以在 body 中传过来,也可以支持批量修改。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1259 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 17:37 PVG 01:37 LAX 09:37 JFK 12:37
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86