V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
sazima
V2EX  ›  程序员

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

  •  
  •   sazima ·
    sazima · 2020 年 2 月 8 日 · 4858 次点击
    这是一个创建于 2173 天前的主题,其中的信息可能已经有所发展或是发生改变。

    谢谢

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

    /api/
    /admin/
    wangchonglie
        20
    wangchonglie  
       2020 年 2 月 9 日
    @timothyqiu #18 请问这样做的目的主要是为了减少业务处理时候的逻辑判断吗? 但这样是不是就把任务给了前端呢?
    timothyqiu
        21
    timothyqiu  
       2020 年 2 月 9 日
    @wangchonglie 该做的还是在做,只是放到了专门的地方。
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   Solana   ·   976 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 22:07 · PVG 06:07 · LAX 14:07 · JFK 17:07
    ♥ Do have faith in what you're doing.