api 接口设计问题: "获取所有数据"和"获取我的数据"接口是分开的吗 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
sazima
V2EX    程序员

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

  •  
  •   sazima
    sazima 2020-02-08 10:18:29 +08:00 4735 次点击
    这是一个创建于 2081 天前的主题,其中的信息可能已经有所发展或是发生改变。

    谢谢

    21 条回复    2020-02-09 21:19:55 +08:00
    opengps
        1
    opengps  
       2020-02-08 10:20:31 +08:00 via Android
    从功能上来说可以一个接口,但是从全照上来说尽量拆分成 2 个,来避免越权查看
    yianbin
        2
    yianbin  
       2020-02-08 10:28:56 +08:00
    分开为佳
    keepeye
        3
    keepeye  
       2020-02-08 10:33:21 +08:00
    看我的数据是公开的还是私密的
    sazima
        4
    sazima  
    OP
       2020-02-08 10:36:01 +08:00
    @opengps @yianbin 谢谢 我分成了类似 /api/v1/data/ 和 /api/v1/data/my/的形式
    sazima
        5
    sazima  
    OP
       2020-02-08 10:36:24 +08:00
    @keepeye 公开的呢
    xulolololololo
        6
    xulolololololo  
       2020-02-08 10:44:35 +08:00   1
    /api/v1/data/ 参数 user_id , 用登录态控制权限
    keepeye
        7
    keepeye  
       2020-02-08 10:54:36 +08:00
    @sazima 公开的应该通过 user_id 来获取指定用户数据 /api/v1/data/user_id
    looplj
        8
    looplj  
       2020-02-08 11:00:01 +08:00
    @sazima /api/v1/my/data 这样更合适些
    buffzty
        9
    buffzty  
       2020-02-08 11:07:07 +08:00
    我是用一个接口. 接口用参数筛选.还有一个 scene 参数,默认 scene 是 default 查看自己的数据,如果 scene 是 admin 就要求管理员权限.
    ytmsdy
        10
    ytmsdy  
       2020-02-08 11:12:57 +08:00 via iPhone
    分开!
    AngryPanda
        11
    AngryPanda  
       2020-02-08 14:50:41 +08:00
    可以分开写,但是支持同时请求。
    xiaoFine
        12
    xiaoFine  
       2020-02-08 15:36:02 +08:00
    我是分开的
    userid 从 token 里拿
    kof21411
        13
    kof21411  
       2020-02-08 15:36:20 +08:00
    可以开分也可以共用一个接口用参数区分
    timothyqiu
        14
    timothyqiu  
       2020-02-08 17:23:39 +08:00   4
    所有的 /users
    单人的 /users/:user_id
    自己的 /user
        15
    yianbin  
       2020-02-08 18:21:13 +08:00
    @timothyqiu 正解
    wangchonglie
        16
    wangchonglie  
       2020-02-08 21:17:12 +08:00
    @timothyqiu #14 请问为什么自己的就不用单人的那种方式呢?
    buffzty
        17
    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
        18
    timothyqiu  
       2020-02-09 13:14:50 +08:00   1
    @wangchonglie 不必让单人接口特殊处理用户是自己的情况(比如权限管理);客户端也不必额外保存本用户 ID,有 Token 就行; URL 下可以扩展一些只对用户自己有意义的接口。
    xingfa
        19
    xingfa  
       2020-02-09 16:17:42 +08:00
    路由分开吧

    /api/
    /admin/
    wangchonglie
        20
    wangchonglie  
       2020-02-09 16:45:46 +08:00
    @timothyqiu #18 请问这样做的目的主要是为了减少业务处理时候的逻辑判断吗? 但这样是不是就把任务给了前端呢?
    timothyqiu
        21
    timothyqiu  
       2020-02-09 21:19:55 +08:00
    @wangchonglie 该做的还是在做,只是放到了专门的地方。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3287 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 11:47 PVG 19:47 LAX 04:47 JFK 07:47
    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