关于 API 请求字段的部分响应,大家有什么经验或实践吗? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
billly
V2EX    程序员

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

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

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

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

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

    24 条回复    2021-05-12 14:26:48 +08:00
    justseemore
        1
    justseemore  
       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 来确定要哪些字段和剔除哪些字段
    justseemore
        7
    justseemore  
       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     Solana     3510 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 00:07 PVG 08:07 LAX 17:07 JFK 20:07
    Do have faith in what you're doing.
    ubao 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