咨询一下关于接口设计的问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Julio
V2EX    问与答

咨询一下关于接口设计的问题

  •  
  • Julio 2018-03-14 14:10:36 +08:00 3214 次点击
    这是一个创建于 2775 天前的主题,其中的信息可能已经有所发展或是发生改变。
    本人客户端开发,最近在新版开发过程中很痛苦,请教各位大佬。
    我们团队关于接口的开发流程是:后端数据层建表,写数据层接口、后端应用层写 API 接口、客户端开发。
    遇到的问题是:
    1.客户端与后端应用层沟通的成本太大了,一个接口要沟通确定很多次(这一点可以通过规范 API 文档来解决)
    2.客户端必须要等到接口给出来了,才能继续开发,很影响整体的效率。

    为什么这个版本才觉得很痛苦?
    主要是因为这个版本团队走了几个人,原先人多一些,感觉不是特别明显。

    我觉得可以并行开发,就是先设计好 API 接口,然后后端和客户端都按照这个来同步进行开发,不是很好嘛,但是咨询了我们的后端,说不行。原因是,应用层不能自己写字段名,需要数据层给,数据层要等到表建好之后,才能确定字段名。
    在我的了解应用层提供业务相关 API,不需要完全按照数据层给的字段和结构来返回接口吧?

    所以想来问问,大家都是怎么处理的?应用层 API 返回的字段名称必须要和数据库里面的字段名一样吗?给我一些参考,谢谢啦!
    24 条回复    2018-03-14 21:00:36 +08:00
    lllllllllllllll
        1
    lllllllllllllll  
       2018-03-14 14:19:58 +08:00
    客户端毫无疑问是想偷懒。
    Julio
        2
    Julio  
    OP
       2018-03-14 14:25:34 +08:00
    @lllllllllllllll 怎么看出来是想偷懒了啊?只是想提高一下效率而已啊。
    chairuosen
        3
    chairuosen  
       2018-03-14 14:29:13 +08:00   1
    @lllllllllllllll 是应用层才对
    Icezers
        4
    Icezers  
       2018-03-14 14:29:26 +08:00
    #1 楼一句话打动了面试官

    作为客户端兼后端开发,列一下个人认为合适的流程
    1.客户端 UI 开发 | 后端 Model 设计
    2.后端返回接口返回全部 Model 字段并开始编写逻辑 | 客户端进行业务对接和逻辑编写
    3.客户端和后端一起梳理缺少的字段,过滤掉无用字段,添加各种校验
    4.API 小幅度调整
    结束开发

    #API 全程使用 swagger 公示
    Icezers
        5
    Icezers  
       2018-03-14 14:32:23 +08:00
    @Icezers 第一步时间一般不会很长,小问题在第三第四步进行小幅度调整 ,在第二步进行时,应用层和客户端就可以大部分介入开发了
    Julio
        6
    Julio  
    OP
       2018-03-14 14:36:31 +08:00
    @Icezers 感谢。再请问一下,API 接口返回的字段名 和 数据库字段名,两者一样比较好,还是不一样比较好啊?想知道其中的原因 :)
    Icezers
        7
    Icezers  
       2018-03-14 15:18:01 +08:00 via iPhone
    @Julio 一样开发快找问题方便,不一样安全性好,防止 api 接口泄漏信息 这个自己把握下就好
    Julio
        8
    Julio  
    OP
       2018-03-14 15:25:08 +08:00
    @Icezers 好的,感谢!!!
    b821025551b
        9
    b821025551b  
       2018-03-14 15:29:02 +08:00
    前端先偷偷模拟一些数据自己用不就行了,反正就是一些数据的绑定什么的,先把剩下的流程撸下来,等 api 出来再慢慢改回去,死等得等到什么时候。
    Julio
        10
    Julio  
    OP
       2018-03-14 15:41:52 +08:00
    @b821025551b 也考虑过,肯定不能死等。只是如果字段名不确定的话,前端的 model 不好写,即使前端自己定义了,后面发现接口返回的字段或者结构和当初写的不一样,也很麻烦啊
    Zzde
        11
    Zzde  
       2018-03-14 15:46:15 +08:00 via iPhone
    这时候就体现到 mock 的好处了
    3a3Mp112
        12
    3a3Mp112  
       2018-03-14 15:50:04 +08:00
    客户端需要什么字段可以由客户端主动提出。
    Julio
        13
    Julio  
    OP
       2018-03-14 15:53:13 +08:00
    @Zzde 是的,要是一开始就设计好接口,然后使用 mock,就流畅了
    Julio
        14
    Julio  
    OP
       2018-03-14 15:55:10 +08:00
    @3a3Mp112 赞同,关键是不让客户端提,原因是应用层不定义字段名,需要数据层来定义,数据层定义的话,就直接到数据库了
    learnshare
        15
    learnshare  
       2018-03-14 16:10:34 +08:00   1
    1. 先写 API 文档;
    2. 根据文档 mock 数据,后端没有也罢
    Julio
        16
    Julio  
    OP
       2018-03-14 16:22:12 +08:00
    @learnshare 赞同!
    hyyou2010
        17
    hyyou2010  
       2018-03-14 16:31:59 +08:00
    一直以为是 API 接口先行
    一直以为接口字段名跟数据库表里面的什么名无关
    一直以为客户端和后端的交互是基于业务,这个根据需求来定,跟各自内部结构无关
    mogita
        18
    mogita  
       2018-03-14 16:35:58 +08:00
    前后端分离一种比较舒服的协作开发是文档先行,剩下的服务端、客户端等均平行位于文档之下。
    Julio
        19
    Julio  
    OP
       2018-03-14 16:42:37 +08:00
    @hyyou2010 不好意思,让你涨见识了
    Julio
        20
    Julio  
    OP
       2018-03-14 16:45:06 +08:00
    @ck65 是的,好的流程,效率高很多,写代码也舒服。
    akira
        21
    akira  
       2018-03-14 16:47:41 +08:00
    后端偷懒了。 或者框架绑的太死了
    Light3
        22
    Light3  
       2018-03-14 18:02:34 +08:00
    不是很懂 你管人数据库里叫什么名字呢..
    还有就是你们后端开发真的懒..
    我开发接口一般都是 和客户端沟通大概需要的字段 然后他们先写页面 然后谁这边先写完了 就做一个接口模拟数据 然后按照这个模拟数据的格式 返回 api 接口数据 并记录在本地 api 管理里面(有助于以后分锅) 然后写上每个字段的名字 类型 什么意思 不就 ok 了吗?(当然我们是小公司)
    Julio
        23
    Julio  
    OP
       2018-03-14 18:16:36 +08:00
    @akira 明白人
    @Light3 对啊,这样不是很好嘛,哎。
    justinwu
        24
    justinwu  
       2018-03-14 21:00:36 +08:00 via iPhone
    根据依赖倒置原则和稳定抽象原则,接口应该是抽象且稳定的,应用层和实现层都应依赖于接口,两边可以独立变化互不影响。

    你们后端或是底层的人该转变下态度了,不然直接让客户端直接连数据库算了,自己也落得清闲。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2284 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 01:20 PVG 09:20 LAX 18:20 JFK 21:20
    Do have faith in what you're doing.
    ubao msn 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