关于 API 设计问题,请大家指点指点 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
coolair
V2EX    API

关于 API 设计问题,请大家指点指点

  •  
  •   coolair 2023-12-25 19:59:13 +08:00 3155 次点击
    这是一个创建于 730 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我用的 DRF 。

    在设计时,比如: http://localhost/tasks

    如果想要一个获取用户 tasks 的接口:
    当前用户: http://localhost/users/me/tasks
    其他用户: http://localhost/users/{id}/tasks

    如果把这个接口放在 user view 里面实现,就无法复用 task view 里面的 filter ,如果放在 task view 里面实现,重写 url path ,感觉 url 不一致,容易造成误解。
    7 条回复    2023-12-26 18:22:37 +08:00
    luckrnx09
        1
    luckrnx09  
       2023-12-25 23:32:33 +08:00 via iPhone   1
    前端如果能拿到当前用户 id 的话,我觉得 http://localhost/users/{id}/tasks 一个接口就够了。
    orangie
        2
    orangie  
       2023-12-25 23:39:19 +08:00   1
    应该是 /tasks?userId=xxx 这样设计,查询的主体是 task ,task 并不是 user 的一部分,反过来 user 也不是 task 的一部分,而是查询条件,所以应该用 query ,这样既复用 task view 里面的 filter ,url 也完全没有问题。
    coolair
        3
    coolair  
    OP
       2023-12-26 09:32:04 +08:00
    @luckrnx09 #1 这样的话,就没办法获取到所有的 tasks 了。
    coolair
        4
    coolair  
    OP
       2023-12-26 09:42:03 +08:00
    @orangie #2 这样的话,如果想获取 task 详情,/tasks/{id 这样,再传 userId=xxx 就不太好了,如果使用 /users/{user_id}/tasks/{task_id} 就很清晰了。
    KiepieDd
        5
    KiepieDd  
       2023-12-26 10:29:43 +08:00
    http://localhost/users/{id}/tasks 留着一个就够了,http://localhost/users/me/tasks 这个可以不用,因为获取当前用户的可以通过 session 获取 id
    orangie
        6
    orangie  
       2023-12-26 11:27:10 +08:00
    @coolair 获取 task 详情,/tasks/{id} 这样就应该是完全不需要传 userId=xxx 了吧,难道 task 和 user 是多对多的关系?我理解 task 和 user 是多对一的关系。如果居然是多对多的关系,也就是同一个 task 对不同用户看起来居然有差别,那么传 userId=xxx 也是必然的。用路径表示实体和属性的关系,用 query 表示关联关系比较清晰。
    EeveeRibbon
        7
    EeveeRibbon  
       2023-12-26 18:22:37 +08:00
    task 和用户是多对多的关系吗?
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2989 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 38ms UTC 13:10 PVG 21:10 LAX 05:10 JFK 08:10
    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