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

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

  •  
  •   Julio · 2018-03-14 14:10:36 +08:00 · 2892 次点击
    这是一个创建于 2477 天前的主题,其中的信息可能已经有所发展或是发生改变。
    本人客户端开发,最近在新版开发过程中很痛苦,请教各位大佬。
    我们团队关于接口的开发流程是:后端数据层建表,写数据层接口、后端应用层写 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 接口先行
    一直以为接口字段名跟数据库表里面的什么名无关
    一直以为客户端和后端的交互是基于业务,这个根据需求来定,跟各自内部结构无关
    ck65
        18
    ck65  
       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   ·   实用小工具   ·   1228 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 17:57 · PVG 01:57 · LAX 09:57 · JFK 12:57
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.