• 请不要在回答技术问题时复制粘贴 AI 生成的内容
billly
V2EX  ›  程序员

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

  •  
  •   billly · May 11, 2021 · 4490 views
    This topic created in 2002 days ago, the information mentioned may be changed or developed.

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

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

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

    24 replies  •  2021-05-12 14:26:48 +08:00
    justseemore
    justseemore
    May 11, 2021
    1
    😂 这个不是接口返回直接约定的么。
    iplayio2019
    iplayio2019
    May 11, 2021
    2
    让客户端传递 field 还真有这么实现的
    billly
    billly
    OP
    May 11, 2021
    3
    @zpfhbyx 约定了 后面会变的啊
    billly
    billly
    OP
    May 11, 2021
    4
    @iplayio2019 自己也感觉不太好 但也没想到更优雅的方式
    miokowsw
    miokowsw
    May 11, 2021
    5
    试一下 GraphQL
    ChoateYao
    ChoateYao
    May 11, 2021
    6
    就是让客户端请求 field 和 expect 来确定要哪些字段和剔除哪些字段
    justseemore
    justseemore
    May 11, 2021
    7
    @billly 。。变改就行了啊。。
    ch2
    ch2
    May 11, 2021❤️1
    8
    GraphQL 是标准的解法
    no1xsyzy
    no1xsyzy
    May 11, 2021❤️1
    9
    你全传过去,不需要的部分客户端抛弃不行吗(
    xuanbg
    xuanbg
    May 11, 2021
    10
    GraphQL 的够了啊! 9 楼才是正解。后端全给,前端要不要用随意。一般后端设计数据结构的时候是根据原型来的,给过去的字段前端不用很少见。
    CamD
    CamD
    May 12, 2021 via iPhone
    11
    graphql
    tonyaiken
    tonyaiken
    May 12, 2021 via iPhone
    12
    fields, projection 都行
    renmu123
    renmu123
    May 12, 2021 via Android
    13
    都给就完事了,前端要啥自己拼去
    kaneg
    kaneg
    May 12, 2021 via iPhone
    14
    OData 有规范支持。用户可以先获取 metadata 来拿到字段定义,之后就可以有选择性返回指定的自动
    IvanLi127
    IvanLi127
    May 12, 2021 via Android
    15
    我之前做都是通过传递一个用途的字段来控制返回的字段。比如下拉就是 forDropdown=true 。现在我用 GraphQL 。
    KingOfUSA
    KingOfUSA
    May 12, 2021
    16
    如果是 java 系的话,可以试试这个库 https://github.com/ksprider/Surgical
    KingOfUSA
    KingOfUSA
    May 12, 2021
    17
    @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
    ganning
    May 12, 2021
    18
    fastjson 里好像有个过滤器,可以看一下
    lanten
    lanten
    May 12, 2021
    19
    你们那么多用 GraphQL 的大佬,我想问一句,字符串模板里面怎么整合 TS 类型?
    buffzty
    buffzty
    May 12, 2021
    20
    我的做法是 前端传 scene ,后端根据 scene 返回不同的数据结构. 跟 graphQL 类似.
    对 ts 友好.
    shyling
    shyling
    May 12, 2021
    21
    这不就是 GraphQL
    ebingtel
    ebingtel
    May 12, 2021
    22
    @billly 没啥问题 能保证安全的话,https://github.com/Tencent/APIJSON 这个 nb 的开源 也这么搞
    lepig
    lepig
    May 12, 2021
    23
    楼主那么多推荐 GraphQL 的,我就想问一句
    你们是自己在生产环境用过还是想让别人为你踩坑
    NotFounder
    NotFounder
    May 12, 2021
    24
    不了解 GraphQL 或者考虑是否用 GraphQL 的,可以看下这个: https://ruby-china.org/topics/41141
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   5358 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 63ms · UTC 02:25 · PVG 10:25 · LAX 18:25 · JFK 21:25
    ♥ Do have faith in what you're doing.