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

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

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