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

关于 API 请求字段的部分响应,大家有什么经验或实践吗?

  •  
  •   billly · 2021-05-11 15:41:01 +08:00 · 2943 次点击
    这是一个创建于 1326 天前的主题,其中的信息可能已经有所发展或是发生改变。

    例如: User(id, name, phone, email)

    而请求时,只需要 id,name,phone

    现在是让客户端传递 field 字段实现,但感觉不太好

    24 条回复    2021-05-12 14:26:48 +08:00
    zpfhbyx
        1
    zpfhbyx  
       2021-05-11 15:50:30 +08:00
    😂 这个不是接口返回直接约定的么。
    iplayio2019
        2
    iplayio2019  
       2021-05-11 15:53:37 +08:00
    让客户端传递 field 还真有这么实现的
    billly
        3
    billly  
    OP
       2021-05-11 16:10:27 +08:00
    @zpfhbyx 约定了 后面会变的啊
    billly
        4
    billly  
    OP
       2021-05-11 16:11:21 +08:00
    @iplayio2019 自己也感觉不太好 但也没想到更优雅的方式
    miokowsw
        5
    miokowsw  
       2021-05-11 16:31:26 +08:00
    试一下 GraphQL
    ChoateYao
        6
    ChoateYao  
       2021-05-11 16:35:01 +08:00
    就是让客户端请求 field 和 expect 来确定要哪些字段和剔除哪些字段
    zpfhbyx
        7
    zpfhbyx  
       2021-05-11 17:57:42 +08:00
    @billly 。。变改就行了啊。。
    ch2
        8
    ch2  
       2021-05-11 18:02:59 +08:00   ❤️ 1
    GraphQL 是标准的解法
    no1xsyzy
        9
    no1xsyzy  
       2021-05-11 21:17:31 +08:00   ❤️ 1
    你全传过去,不需要的部分客户端抛弃不行吗(
    xuanbg
        10
    xuanbg  
       2021-05-11 21:28:56 +08:00
    GraphQL 的够了啊! 9 楼才是正解。后端全给,前端要不要用随意。一般后端设计数据结构的时候是根据原型来的,给过去的字段前端不用很少见。
    CamD
        11
    CamD  
       2021-05-12 00:04:08 +08:00 via iPhone
    graphql
    tonyaiken
        12
    tonyaiken  
       2021-05-12 00:11:17 +08:00 via iPhone
    fields, projection 都行
    renmu123
        13
    renmu123  
       2021-05-12 00:25:49 +08:00 via Android
    都给就完事了,前端要啥自己拼去
    kaneg
        14
    kaneg  
       2021-05-12 01:25:21 +08:00 via iPhone
    OData 有规范支持。用户可以先获取 metadata 来拿到字段定义,之后就可以有选择性返回指定的自动
    IvanLi127
        15
    IvanLi127  
       2021-05-12 09:02:57 +08:00 via Android
    我之前做都是通过传递一个用途的字段来控制返回的字段。比如下拉就是 forDropdown=true 。现在我用 GraphQL 。
    KingOfUSA
        16
    KingOfUSA  
       2021-05-12 09:12:53 +08:00
    如果是 java 系的话,可以试试这个库 https://github.com/ksprider/Surgical
    KingOfUSA
        17
    KingOfUSA  
       2021-05-12 09:19:32 +08:00
    @GetMapping("/demo0")
    @JSON("no,name,age,zoo(name,address,city(id,name))")
    只会返回 no 、name 、age 以及 zoo 对象里面的 name 、address,以及 zoo 下面的 city 里面的 id 、name


    @GetMapping("/demo1")
    @JSON("no,name,zoo(name)")
    只会返回 no 、name 以及 zoo 对象里面的 name


    @GetMapping("/demo2")
    @JSON("no,name")
    只会返回 no 、name
    ganning
        18
    ganning  
       2021-05-12 09:31:54 +08:00
    fastjson 里好像有个过滤器,可以看一下
    lanten
        19
    lanten  
       2021-05-12 09:45:07 +08:00
    你们那么多用 GraphQL 的大佬,我想问一句,字符串模板里面怎么整合 TS 类型?
    buffzty
        20
    buffzty  
       2021-05-12 10:28:48 +08:00
    我的做法是 前端传 scene ,后端根据 scene 返回不同的数据结构. 跟 graphQL 类似.
    对 ts 友好.
    shyling
        21
    shyling  
       2021-05-12 10:48:51 +08:00
    这不就是 GraphQL
    ebingtel
        22
    ebingtel  
       2021-05-12 13:53:51 +08:00
    @billly 没啥问题 能保证安全的话,https://github.com/Tencent/APIJSON 这个 nb 的开源 也这么搞
    lepig
        23
    lepig  
       2021-05-12 14:08:14 +08:00
    楼主那么多推荐 GraphQL 的,我就想问一句
    你们是自己在生产环境用过还是想让别人为你踩坑
    radiocontroller
        24
    radiocontroller  
       2021-05-12 14:26:48 +08:00
    不了解 GraphQL 或者考虑是否用 GraphQL 的,可以看下这个: https://ruby-china.org/topics/41141
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2466 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 01:12 · PVG 09:12 · LAX 17:12 · JFK 20:12
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.