V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
lazy21
V2EX  ›  推广

让后端开发写个 API 文档就有那么难吗?

  •  
  •   lazy21 · 2021-10-25 19:36:09 +08:00 · 3434 次点击
    这是一个创建于 1123 天前的主题,其中的信息可能已经有所发展或是发生改变。

    难,是真的难!

    程序员最讨厌的两件事:1. 写文档,2. 别人不写文档。大多数开发人员不愿意写 API 文档的原因:写文档短期收益远低于付出的成本,然而并不是所有人都能够坚持做有长期收益的事情的。你因为写文档而耽误了当前项目进度,老板会直接找你麻烦;但是因为没写文档而带来的长期收益低,老板是看不见的。这就是现实,让人去做违反人性的事情是非常困难的。

    作为一个前后端分离模式开发的团队,我们经常会看到这样的场景:前端开发和后端开发在一起热烈的讨论“你这接口参数怎么又变了?”,“接口怎么又不通了?”,“稍等,我调试下”,“你再试试..."。

    那能不能写好接口文档,大家都按文档来开发?很难,因为写文档、维护文档比较麻烦,而且费时,还会经常出现 API 更新了,但文档还是旧的,各种同步不一致的情况,从而耽搁彼此的时间。

    之前我们团队也遇到了同样的问题,那么作为研发团队的负责人,我是如何带领团队解决这个问题的呢?

    如何做?

    方法其实很简单,如果能做到让写文档 /维护文档这件事情的短期收益就能远高于付出的成本,那么所有问题都能迎刃而解,开发人员就会非常乐意去写接口文档。

    团队原来的工作模式

    1. API 设计人员使用 Swagger 写接口文档
    2. 前端开发 使用 RAP mock 接口数据
    3. 后端开发 使用 Postman 调试接口
    4. 测试人员 使用 JMeter 测试接口

    我们遇到的问题

    1. 我们团队是前后端同步进入开发的,不能等后端开发完了才出接口文档,前端再进入开发,所以使用后端代码注释自动生成 Swagger 不适合我们。
    2. Swagger 文档效率很低,并且有学习门槛,让团队所有人都熟练手写 Swagger 文档是不现实的,更何况团队不停有新人进来。
    3. 开发人员在 Swagger 定义好文档后,接口调试的时候还需要去 Postman 再定义一遍。
    4. 前端开发 Mock 数据的时候又要去 RAP 定义一遍,手动设置好 Mock 规则。
    5. 测试人员需要去 JMeter 定义一遍。
    6. 前端根据 RAP Mock 出来的数据开发完,后端根据 Swagger 定义的接口文档开发完,各自测试测试通过了,本以为可以马上上线,结果一对接发现各种问题:原来开发过程中接口变更,只修改了 Swagger,但是没有及时同步修改 RAP 。
    7. 同样,测试在 JMeter 写好的测试用例,真正运行的时候也会发现各种不一致。
    8. 开发过程,经常会有发现开始定义的接口文档有不合理的地方,需要临时调整,经常出现接口改了,但是文档没有更新。
    9. 时间久了,各种不一致会越来越严重。

    如何解决

    要做到写文档和及时维护文档的短期收益就能远高于付出的成本,无非两个方向:

    1. 降低写文档的成本
    2. 增加写文档后的收益

    鉴于此,我们设想如果有一款工具做到以下这些是不是就非常爽了?

    1. 完全可视化的界面来编写文档,并且是零学习成本,新人 一来就能上手。
    2. 可以通过接口文档定义的数据结构自动 mock出数据,而无需 前端开发 再写mock规则。
    3. 后端开发 在接口文档基础上调试接口,而无需在去Postman上调试;接口如有变化,调试的时候就自动更新了文档,零成本的保障了接口维护的及时性。
    4. 后端开发 每次调试完一个功能就保存为一个接口用例
    5. 测试人员 直接使用接口用例测试接口。
    6. 测试人员 更加接口文档自动生成测试用例,然后像JMeter一样在直接在上面测试。
    7. 根据接口文档定义的数据结构,自动生成前后端的数据模型代码。

    总结下来,我们需要的就是这么一款工具:

    通过一套系统、一份数据,解决多个系统之间的数据同步问题。只要定义好接口文档,接口调试、数据 Mock 、接口测试就可以直接使用,无需再次定义;接口文档和接口开发调试使用同一个工具,接口调试完成后即可保证和接口文档定义完全一致。高效、及时、准确!

    为此,我们几乎尝遍了市面上所有相关的工具,但是很遗憾,没有找到合适的。

    怎么办?自己干!

    于是,我们自己实现了一个Postman + Swagger + RAP + JMeter

    这个工具就是 Apifox,经常很长一段时间不断更新迭代后,我们基本上完全实现了最初的设想,几乎完美解决了最开始遇到的所有问题,在公司内部大受欢迎。并且也形成了我们自己的最佳实践。

    最佳实践

    1. 前端(或后端)在 Apifox 上定好接口文档初稿。
    2. 前后端 一起评审、完善接口文档,定好接口用例
    3. 前端 使用系统根据接口文档自动生成的 Mock 数据进入开发。
    4. 后端 使用接口用例 调试开发中接口,系统根据接口文档的定义自动校验返回的数据是否正确,只要所有接口用例调试通过,接口就开发完成了。
    5. 后端 开发完成后,测试人员(也可以是后端)使用集合测试功能进行多接口集成测试,完整测试整个接口调用流程。
    6. 前后端 都开发完,前端从Mock 数据切换到正式数据,联调通常都会非常顺利,因为前后端双方都完全遵守了接口定义的规范。

    对外服务

    没错,现在我们已经将Apifox产品化对外服务了,你们团队也可以直接使用Apifox了。

    官网:apifox.cn

    16 条回复    2021-10-26 10:34:10 +08:00
    ihipop
        1
    ihipop  
       2021-10-25 20:10:13 +08:00 via Android   ❤️ 1
    公司使用 apipost 的用户路过
    lazy21
        2
    lazy21  
    OP
       2021-10-25 20:14:56 +08:00   ❤️ 1
    @ihipop 欢迎对比哈哈 api 管理哪家强
    yolee599
        3
    yolee599  
       2021-10-25 20:16:15 +08:00 via Android   ❤️ 31
    这标题。。。推广就好好放推广节点,不要浪费别人时间
    xylophone21
        4
    xylophone21  
       2021-10-25 20:21:21 +08:00
    为什么 API 文档要后端写?
    Goldenjin
        5
    Goldenjin  
       2021-10-25 22:33:04 +08:00 via Android
    又一个 apipost 吗
    Varsion13
        6
    Varsion13  
       2021-10-25 22:55:00 +08:00
    关于 graphql 有计划支持嘛,今天上午的时候发现没有 graphql 支持
    waising
        7
    waising  
       2021-10-25 23:13:03 +08:00 via iPhone
    试用过 就是一定要登录 放弃了
    kyuuseiryuu
        8
    kyuuseiryuu  
       2021-10-26 08:15:13 +08:00 via iPhone
    你以为是开发的问题,其实是老板的问题。

    老板给的工期不包含写文档,那么为什么要去写文档呢?

    写了是情分,不写是本分😂
    siweipancc
        9
    siweipancc  
       2021-10-26 09:02:07 +08:00 via iPhone
    什么傻逼广告内容
    toarya
        10
    toarya  
       2021-10-26 09:10:51 +08:00
    标题党爬啊
    seven123
        11
    seven123  
       2021-10-26 09:16:42 +08:00
    标题党爬啊
    askfermi
        12
    askfermi  
       2021-10-26 09:41:38 +08:00   ❤️ 1
    guozhaohui628
        13
    guozhaohui628  
       2021-10-26 09:44:42 +08:00
    前半部分有道理,是痛点问题。
    lazy21
        14
    lazy21  
    OP
       2021-10-26 10:11:22 +08:00
    @Goldenjin 还是有区别的
    JustRuning
        15
    JustRuning  
       2021-10-26 10:20:02 +08:00
    因公司规模而定吧,还有老板给不给项目组时间,我们用的比较简单 Yapi
    wensonsmith
        16
    wensonsmith  
       2021-10-26 10:34:10 +08:00   ❤️ 2
    @Livid

    这个 Apifox 多次标题党,还是不同账号发的,烦啊
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   951 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 21:30 · PVG 05:30 · LAX 13:30 · JFK 16:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.