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

Body 传参时,有没有必要将查询参数用一个字段包起来

  •  
  •   unt · Mar 15, 2024 · 8420 views
    This topic created in 969 days ago, the information mentioned may be changed or developed.

    例如: POST /api/client

    1. Body 参数
    {
      pageIndex:1,
      pageSize:10,
      area:123,
      type:1,
      star:1
    }
    
    2. Body 参数
    {
      pageIndex:1,
      pageSize:10,
      pBody:{
        area:1,
        type:1,
        star:1
      }
    }
    

    哪种方式比较好,我知道都可以,只是习惯问题,但是应该是有一些历史遗留原因或者道理的,可能是语言间的开发差异导致,可能是开发人员的习惯导致,可能是由。。。。。。。

    请问 V 友们你们更倾向于哪种方式,原因是什么

    40 replies  •  2024-03-16 12:27:46 +08:00
    28Sv0ngQfIE7Yloe
    28Sv0ngQfIE7Yloe
    Mar 15, 2024
    1
    第一种,比较适合继承

    第二种,比较适合组合
    nitmali
    nitmali
    Mar 15, 2024
    2
    得看后端怎么处理的,个人倾向第二种,pageIndex ,pageSize 可以抽出来继承(我是前端)
    iyiluo
    iyiluo
    Mar 15, 2024
    3
    第二个,结构化,你这字段比较少,遇到几百个字段的 json ,都塞在一层,就变成一坨了,分分钟变成屎山。
    sdwgyzyxy
    sdwgyzyxy
    Mar 15, 2024
    4
    第二种定义结构体比较好,而且可以拿任意一部分调用其他模块,所以,推荐第二种
    unt
    unt
    OP
    Mar 15, 2024
    5
    @iyiluo #3 现实情况是没有几百个字段的情况,最多不超过 20 个。现在要定统一规范,在此之前我司是两种并行的
    unt
    unt
    OP
    Mar 15, 2024
    6
    然后这是 POST 的查询方法,对于更新类的方法,没有 pageIndex 和 pageSize ,这时候一个裸的 pBody 是否会很奇怪
    mysdemon
    mysdemon
    Mar 15, 2024❤️2
    7
    java 后端,1 和 2 都用过,一般的查询接口倾向于第一种,架构中有分页参数公共类,继承一下就可以了,第二种的继承要实现范类,名称要固定。如果公司没有规定确定的名称规范,建议用第一种
    chenliangngng
    chenliangngng
    Mar 15, 2024
    8
    直接抄大厂解决方案就可以了,第二种
    siweipancc
    siweipancc
    Mar 15, 2024 via iPhone
    9
    分页属性必须抽象一层,方便互传。查询用第一种,继承。
    unt
    unt
    OP
    Mar 15, 2024
    10
    @chenliangngng #8 在哪里可以看到大厂示例,我看到很多比如阿里云的公开接口,参数都是直接平铺裸露在外面的
    deepshe
    deepshe
    Mar 15, 2024
    11
    之前见过分页属性放到 header 里,这样就不影响 body 了
    estk
    estk
    Mar 15, 2024 via iPhone
    12
    楼主这种情况还不如用 graphql
    KKKKKKKKKKKKKKKK
    KKKKKKKKKKKKKKKK
    Mar 15, 2024
    13
    第二种
    wolfie
    wolfie
    Mar 15, 2024
    14
    第一种
    第二种写个接口看看,难受不难受。
    zhy0216
    zhy0216
    Mar 15, 2024 via Android
    15
    看 area type star 是否是同时存在或不存在
    如果是的 第二种好
    不是都可以
    BeautifulSoap
    BeautifulSoap
    Mar 15, 2024 via Android
    16
    @unt 你好,现实是一个请求有几百个字段是存在的。最近就接触到了一个几百个字段的项目
    unt
    unt
    OP
    Mar 15, 2024 via iPhone
    17
    @zhy0216 新增和编辑的时候是同时存在,查询的时候是可能存在可能不存在
    wanniwa
    wanniwa
    Mar 15, 2024
    18
    第二种,因为你有的时候还是会返回 list 数据
    {
    "pageIndex": 1,
    "pageSize": 10,
    "data": [{
    "area": 1,
    "type": 1,
    "star": 1
    },{
    "area": 2,
    "type": 2,
    "star": 2
    }]
    }
    wanniwa
    wanniwa
    Mar 15, 2024
    19
    如果是单条根据 id 查询的接口,那应该也不会有 pageIndex ,pageSize 这个两个分页字段了,就直接下面这样就行了
    {
    "area": 2,
    "type": 2,
    "star": 2
    }
    unt
    unt
    OP
    Mar 15, 2024
    20
    @wanniwa #18 你这是返回,我指的是请求,返回不会是这样返的
    unt
    unt
    OP
    Mar 15, 2024
    21
    @wanniwa #19 不能因为有 pageIndex 和 pageSize 就包,没有就不包吧,不统一了
    wanniwa
    wanniwa
    Mar 15, 2024
    22
    @unt #21 哦哦,我看错了
    wanniwa
    wanniwa
    Mar 15, 2024
    23
    推荐第一种,抽一个通用 page 的父类就行,第二种谁写谁恶心,还要写一个组装对象的 class ,pBody 些得写一个 class
    wanniwa
    wanniwa
    Mar 15, 2024
    24
    @wanniwa #22 pBody 也得写一个 class
    wanniwa
    wanniwa
    Mar 15, 2024
    25
    @wanniwa pBody 也得写一个 class
    9fan
    9fan
    Mar 15, 2024
    26
    组合无疑比继承更加优雅,相对于 java
    nekomiao
    nekomiao
    Mar 15, 2024
    27
    只有我是吧 page 参数放 urlPath 里的吗。。
    ```java
    @PostMapping(value = "/getPage/{pageNo}/{pageSize}")
    public Result getPage(@RequestBody SelectVO selectVO, @PathVariable Integer pageNo, @PathVariable Integer pageSize)
    ```
    wu00
    wu00
    Mar 15, 2024
    28
    request 用 1 ,主要是 get 请求参数更优雅

    response 用 2 ,结构优雅,更容易做泛型封装
    unt
    unt
    OP
    Mar 15, 2024
    29
    @nekomiao #27 现在大部分路由参数用得很少,主流还是 query 和 body
    yrzs
    yrzs
    Mar 15, 2024
    30
    组合优于继承
    yooomu
    yooomu
    Mar 15, 2024
    31
    我用 GET 和 query 参数,所以可能偏向于第一种
    sunpj
    sunpj
    Mar 15, 2024
    32
    @nekomiao 一般很少这么写吧
    HappyAndSmile
    HappyAndSmile
    Mar 15, 2024
    33
    第一种
    unt
    unt
    OP
    Mar 15, 2024
    34
    @yooomu #31 query 的话确实第一种更加优雅,但是我们最开始定的规范是一个 get 方法都不用,全部用 post 方法放 json 里,所以才用了第二种。
    pannanxu
    pannanxu
    Mar 15, 2024
    35
    {"filter":{},"pageable":{"current":1,"pageSize":20}}
    unt
    unt
    OP
    Mar 15, 2024
    36
    @pannanxu #35 有点丑
    xavierchow
    xavierchow
    Mar 15, 2024
    37
    > 但是我们最开始定的规范是一个 get 方法都不用,全部用 post 方法放 json 里,

    不知道为什么一开始定这样的规范,与其自己去定义一套新的,还不如去使用已被详细讨论过并被严格定义的行业规范,比如 https://jsonapi.org/format/#fetching
    unt
    unt
    OP
    Mar 15, 2024 via iPhone
    38
    @xavierchow 因为应用场景没有任何性能压力,并发不会超过 50
    AItsuki
    AItsuki
    Mar 15, 2024
    39
    第一种吧,本质上是一个 filter ,全部属性平铺就好了。第二种无论是客户端还是服务端都嫌麻烦
    changdy
    changdy
    Mar 16, 2024
    40
    @nekomiao 卧槽 大兄弟 你这是走到哪 都是异教徒啊...
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   944 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 223ms · UTC 20:07 · PVG 04:07 · LAX 12:07 · JFK 15:07
    ♥ Do have faith in what you're doing.