V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
xlbychen97
V2EX  ›  问与答

请教大佬们一个接口设计的问题

  •  
  •   xlbychen97 · 2023-03-23 20:57:38 +08:00 · 1101 次点击
    这是一个创建于 612 天前的主题,其中的信息可能已经有所发展或是发生改变。

    简单描述下场景,前后端分离的项目,一个功能提交接口,在提交时要做多个规则校验,规则处理结果分为 2 类,拦截和仅提示。仅提示的规则又分为让用户确认 /取消和仅确认 2 类,所有提示确认完后才能正式提交。在触发多个仅提示规则的场景下,接口应该怎么设计?

    8 条回复    2023-03-24 08:28:37 +08:00
    iseki
        1
    iseki  
       2023-03-23 21:09:43 +08:00 via Android
    不知道具体业务,只能根据自己理解的说说自己的想法,触发拦截和提示时报错返回,确认时增加一个额外的确认指示,看到确认指示则忽略提示
    xlbychen97
        2
    xlbychen97  
    OP
       2023-03-23 21:12:41 +08:00
    @iseki 只有一次确认的话加个字段标识可以处理,但是多个不同提示的话,加多个确认字段来标识每一个确认,感觉有点重,就是想知道有没有其他方案
    iseki
        3
    iseki  
       2023-03-23 21:16:49 +08:00 via Android
    @xlbychen97 不完全的确认允许提交吗?如果允许,你关心这个干嘛;如果不允许,这一个确认标示代表所有确认不好么
    lingex
        4
    lingex  
       2023-03-23 21:39:34 +08:00 via Android
    前端判断 /提示。数据到了后端除非参数非法,都接受。
    oneisall8955
        5
    oneisall8955  
       2023-03-23 22:01:11 +08:00 via Android
    分两个接口来写

    第 1 个预提交,用来判断,入参 a ,响应结果 A ,前端根据 A 展示让用户确认参数 b (包含每一个确认项)

    第 2 个确认提交任务,入参 a+b ,重复执行第 1 个接口的校验,得出结果必须是 A ,否则报错,再从 b 中校验是否包含所有确认项目,否则报错,校验通过就提交任务即可
    renmu
        6
    renmu  
       2023-03-23 22:17:51 +08:00 via Android
    就所有参数传进去,然后 ifelse ,提示的规则让前端去做
    CEBBCAT
        7
    CEBBCAT  
       2023-03-23 22:49:28 +08:00 via iPhone
    @xlbychen97 #2 不用加多个确认字段呀傻宝,每个错误总得定个错误码吧?你把错误码存到列表里不就行了吗?

    综述一下,要么拆成两个接口,一个纯预检,一个确认加执行,要么同一个接口除了辅助校验,另外接收确认。

    执行之前检查 Request ,每错一次向集合 A 追加一个唯一错误码,检查完后拿提交过来的“确认”去集合 A 消除,消完了才让继续执行。需要额外讨论的是需不需要在“确认”中额外确认错误项,以防确认的错误和实际的提交不一致。比如除了要求前端复述“我要全部提款”,还要要求前端复述“我要全部提款,现在看到户头余额五块八毛七”

    这样可以防止请求发出后后端数据又有更新,产生差错。类似于数据库版本号的设计
    darkengine
        8
    darkengine  
       2023-03-24 08:28:37 +08:00
    关键是“在提交时要做多个规则校验”在前端还是后端做。
    1 ,前端可以做:前端在用户确认所有仅提示规则之后再发起提交请求。
    2 ,只能后端做:加校验规则接口。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3078 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 202ms · UTC 00:43 · PVG 08:43 · LAX 16:43 · JFK 19:43
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.