api 接口设计问题: "获取所有数据"和"获取我的数据"接口是分开的吗

2020-02-08 10:18:29 +08:00
 sazima

谢谢

4286 次点击
所在节点    程序员
21 条回复
opengps
2020-02-08 10:20:31 +08:00
从功能上来说可以一个接口,但是从全照上来说尽量拆分成 2 个,来避免越权查看
yianbin
2020-02-08 10:28:56 +08:00
分开为佳
keepeye
2020-02-08 10:33:21 +08:00
看我的数据是公开的还是私密的
sazima
2020-02-08 10:36:01 +08:00
@opengps @yianbin 谢谢 我分成了类似 /api/v1/data/ 和 /api/v1/data/my/的形式
sazima
2020-02-08 10:36:24 +08:00
@keepeye 公开的呢
xulolololololo
2020-02-08 10:44:35 +08:00
/api/v1/data/ 参数 user_id , 用登录态控制权限
keepeye
2020-02-08 10:54:36 +08:00
@sazima 公开的应该通过 user_id 来获取指定用户数据 /api/v1/data/user_id
ZSeptember
2020-02-08 11:00:01 +08:00
@sazima /api/v1/my/data 这样更合适些
buffzty
2020-02-08 11:07:07 +08:00
我是用一个接口. 接口用参数筛选.还有一个 scene 参数,默认 scene 是 default 查看自己的数据,如果 scene 是 admin 就要求管理员权限.
ytmsdy
2020-02-08 11:12:57 +08:00
分开!
AngryPanda
2020-02-08 14:50:41 +08:00
可以分开写,但是支持同时请求。
xiaoFine
2020-02-08 15:36:02 +08:00
我是分开的
userid 从 token 里拿
kof21411
2020-02-08 15:36:20 +08:00
可以开分也可以共用一个接口用参数区分
timothyqiu
2020-02-08 17:23:39 +08:00
所有的 /users
单人的 /users/:user_id
自己的 /user
yianbin
2020-02-08 18:21:13 +08:00
@timothyqiu 正解
wangchonglie
2020-02-08 21:17:12 +08:00
@timothyqiu #14 请问为什么自己的就不用单人的那种方式呢?
buffzty
2020-02-08 22:21:35 +08:00
初学时用 1,现在为了追求速度用 2. postData 里面加上筛选条件,排序条件,场景
这样子做,所有的模型都写用通用接口,后端只需要为模型写几十行代码配置一下就完事.控制器都不需要写.
马上准备一个接口再聚合一下 /curd,只需要在现有的 queryExtra 中再加个 model 名就行
```typescript
type OrderKeys = 'id' | 'ctime'
type Scene = 'admin' | 'default'
interface QueryExtra extends BaseExtra<Scene> {}
type ActGetListParam = GetListParam<FilterKeys, OrderKeys, QueryExtra>
type AddData = Omit<Model, 'adeptLabelList' | 'department' | 'id'>
type EditData = AddData & Pick<Model, 'id'>

export async function lists<T = Model>(data: ActGetListParam) {
return bpost<{ list: T[] }>({
url: route + '/list',
data,
})
}
export async function detail<T = Model>(data: { id: number; scene?: Scene }) {
return bpost<{ detail: T }>({
url: route + '/detail',
data,
})
}
```
timothyqiu
2020-02-09 13:14:50 +08:00
@wangchonglie 不必让单人接口特殊处理用户是自己的情况(比如权限管理);客户端也不必额外保存本用户 ID,有 Token 就行; URL 下可以扩展一些只对用户自己有意义的接口。
xingfa
2020-02-09 16:17:42 +08:00
路由分开吧

/api/
/admin/
wangchonglie
2020-02-09 16:45:46 +08:00
@timothyqiu #18 请问这样做的目的主要是为了减少业务处理时候的逻辑判断吗? 但这样是不是就把任务给了前端呢?

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

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

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

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

© 2021 V2EX