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

2023-12-25 19:59:13 +08:00
 coolair
我用的 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 不一致,容易造成误解。
1949 次点击
所在节点    API
7 条回复
luckrnx09
2023-12-25 23:32:33 +08:00
前端如果能拿到当前用户 id 的话,我觉得 http://localhost/users/{id}/tasks 一个接口就够了。
orangie
2023-12-25 23:39:19 +08:00
应该是 /tasks?userId=xxx 这样设计,查询的主体是 task ,task 并不是 user 的一部分,反过来 user 也不是 task 的一部分,而是查询条件,所以应该用 query ,这样既复用 task view 里面的 filter ,url 也完全没有问题。
coolair
2023-12-26 09:32:04 +08:00
@luckrnx09 #1 这样的话,就没办法获取到所有的 tasks 了。
coolair
2023-12-26 09:42:03 +08:00
@orangie #2 这样的话,如果想获取 task 详情,/tasks/{id} 这样,再传 userId=xxx 就不太好了,如果使用 /users/{user_id}/tasks/{task_id} 就很清晰了。
KiepieDd
2023-12-26 10:29:43 +08:00
http://localhost/users/{id}/tasks 留着一个就够了,http://localhost/users/me/tasks 这个可以不用,因为获取当前用户的可以通过 session 获取 id
orangie
2023-12-26 11:27:10 +08:00
@coolair 获取 task 详情,/tasks/{id} 这样就应该是完全不需要传 userId=xxx 了吧,难道 task 和 user 是多对多的关系?我理解 task 和 user 是多对一的关系。如果居然是多对多的关系,也就是同一个 task 对不同用户看起来居然有差别,那么传 userId=xxx 也是必然的。用路径表示实体和属性的关系,用 query 表示关联关系比较清晰。
qiaofanxing
2023-12-26 18:22:37 +08:00
task 和用户是多对多的关系吗?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1003348

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX