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

后端不写 api 文档怎么办, V 友们究竟是怎么解决的

  •  
  •   unt · 2023-07-25 23:03:23 +08:00 · 9914 次点击
    这是一个创建于 487 天前的主题,其中的信息可能已经有所发展或是发生改变。

    后端只写 swagger,那玩意儿真的是狗都不看,为什么能设计得如此丑陋,有没有写得好的 swagger 让我看看,看是我们后端的问题还是这个工具的问题。

    像下图这种文档只能手码吗,有工具吗

    萤石接口.png

    108 条回复    2023-10-14 22:42:51 +08:00
    1  2  
    owen800q
        1
    owen800q  
       2023-07-25 23:06:37 +08:00 via iPhone
    叫他直接给 postman collection, 自己生成 html 文档
    https://github.com/karthiks3000/postman-doc-gen
    bojackhorseman
        2
    bojackhorseman  
       2023-07-25 23:07:03 +08:00 via iPhone   ❤️ 2
    https://github.com/acacode/swagger-typescript-api
    我都是用这个库根据 swagger.json 生成请求文件,支持 axios 模板。
    后端手写文档的我才想骂人了,改了接口也不同步。swagger 方便的一批。
    owen800q
        3
    owen800q  
       2023-07-25 23:07:56 +08:00 via iPhone
    @owen800q 我日常工作就是這樣做的,現實是後端不可能寫文檔,至少我沒見過會給文檔的後端開發
    lei2j
        4
    lei2j  
       2023-07-25 23:09:17 +08:00
    swagger 写的多方便啊,参数变了立马同步
    SuperManNoPain
        5
    SuperManNoPain  
       2023-07-25 23:18:19 +08:00
    现在不会有人特地去手写的,都是写备注配合插件自动同步或者直接 swagger 了,
    LeegoYih
        6
    LeegoYih  
       2023-07-25 23:24:03 +08:00
    Swagger 只是一个 UI 啊,它是基于 OpenAPI 规范实现的,有很多工具可以通过 OpenAPI 反向生成代码,比如: https://github.com/alibaba/pont
    Vegetable
        7
    Vegetable  
       2023-07-25 23:26:43 +08:00   ❤️ 2
    后端给了 Swagger 自己嫌丑?我冒昧的问一句,市面上有但凡一个流行的文档工具不支持导入 Swagger 吗?
    dayeye2006199
        8
    dayeye2006199  
       2023-07-26 02:36:24 +08:00 via Android
    都给了 OAS 了,想要长什么样自己挑个工具就行
    zachlhb
        9
    zachlhb  
       2023-07-26 08:09:59 +08:00 via Android   ❤️ 1
    这个应该找公司规范,指定统一的文档规范,总之我们是不用 swagger 的,我们用 yapi 自己建了一套文档平台,就算你项目里用了 swagger ,也要整理到 yapi 上面
    MozzieW
        10
    MozzieW  
       2023-07-26 08:47:23 +08:00
    "后端不写 api 文档怎么办"
    "后端只写 swagger"

    你自己看着办
    sjn9588
        11
    sjn9588  
       2023-07-26 08:49:53 +08:00
    swagger 丑陋的意思是? yml 可读性差?还是说 swagger ui 丑啊。
    IvanLi127
        12
    IvanLi127  
       2023-07-26 08:56:20 +08:00 via Android
    swagger 可以在代码里给它加各种请求示例,加各类的响应代表的含义,每个字段都能写备注,能标记接口需要的登录凭据,还能在页面上直接发请求测试,肯定够用了。
    tsanie
        13
    tsanie  
       2023-07-26 08:56:58 +08:00
    不喜欢 swagger ui 的我推荐个 redoc
    Imindzzz
        14
    Imindzzz  
       2023-07-26 09:07:02 +08:00 via Android
    qinfengge
        15
    qinfengge  
       2023-07-26 09:13:23 +08:00
    idea 中有 APIfox 的插件,可以直接同步
    me1onsoda
        16
    me1onsoda  
       2023-07-26 09:15:45 +08:00
    那就是你这逼前端的问题,swagger 可以直接调试,不比文档高效?接口变动手动维护文档?
    lihexinkai
        17
    lihexinkai  
       2023-07-26 09:18:55 +08:00   ❤️ 2
    可以用 knif4j ,swagger 确实没法看,不过对于后端来说他肯定不想搞的,看你本事了,搞好关系,或者 pua 他😎
    cnbattle
        18
    cnbattle  
       2023-07-26 09:19:34 +08:00
    看不到图,

    推测: 矛盾点 可能是后端用的 swagger 用的也不标准,生成出来的文档不清晰,导致看不懂,

    更多还是人或沟通问题 不是工具问题
    fumichael
        19
    fumichael  
       2023-07-26 09:20:11 +08:00
    @bojackhorseman #2 swaggerui 有些版本是挺难用的
    我是装油猴脚本辅助复制的
    你这个方案貌似不错
    EchoAI
        20
    EchoAI  
       2023-07-26 09:20:24 +08:00   ❤️ 2
    有可能 OP 想问的是:后端只给一个 swagger 里面有很多的字段,也不表明字段的含义,让你去猜这些字段到底是什么意思。哪些字段是必填参数,哪些是可选参数。参数都有哪些可选的选项,参数类型明明是 int ,实测接口下来确实 string 。而且一股脑的把所有的字段都给你了,还有许多字段是在某一个字段为特定值的时候才会有。这些后端统统不说。
    unt
        21
    unt  
    OP
       2023-07-26 09:22:07 +08:00   ❤️ 1
    @EchoAI #20 是的是的,你完全懂我。我想要的是 0 沟通,全靠文档对接。现在沟通成本太高了
    unt
        22
    unt  
    OP
       2023-07-26 09:23:36 +08:00
    @EchoAI #20 而且我们这边对于嵌套对象的注释也没有,只有第一层对象属性的注释
    ruoxie
        23
    ruoxie  
       2023-07-26 09:24:44 +08:00 via iPhone
    sw 看起来确实费劲,我都是导到 yapi 里
    HelloWorld556
        24
    HelloWorld556  
       2023-07-26 09:24:58 +08:00
    我前后端自己写,没这些烦恼。你的图片看不到啊 萤石接口.png
    PlsDontStop
        25
    PlsDontStop  
       2023-07-26 09:30:38 +08:00 via iPhone
    你倒是给我们看看怎么个丑陋法啊
    LavaC
        26
    LavaC  
       2023-07-26 09:31:16 +08:00
    swagger 能不能看全看后端用不用心,有的别说注释了,参数都写不全,还有文档写 query 传数组的。这时候过去跟后端儒雅随和一番是最有效的解决方法。
    Desiree
        27
    Desiree  
       2023-07-26 09:31:53 +08:00
    最恶心的是,有文档了,字段没有注释...
    wxw752
        28
    wxw752  
       2023-07-26 09:33:31 +08:00
    那是你们后端 swagger 注解写的不规范,直接骂他就行了,这个锅 swagger 可不能背。
    fumichael
        29
    fumichael  
       2023-07-26 09:33:53 +08:00
    楼主的图,微博图床现在又不能直接访问了?
    https://i0.wp.com/tva1.sinaimg.cn/large/aa9984degy1hg9jpuq94oj20wi17s447.jpg
    InDom
        30
    InDom  
       2023-07-26 09:37:57 +08:00
    作为一个后端,说真的确实不愿意专门去写文档,如果非要提供文档,我会想办法自动化生成 md 然后再转成 word 或 html 提交。

    但是,无论使用 swagger 还是 postman ,最少得有一个地方能有完整的,随时更新且应该尽可能正确带有详细注释的接口说明。

    至于好不好看,老子才不管呢,又不是不能用。你不是前端嘛,嫌不好看可以自己调样式啊。

    所以,个人结论:后端提供文档字段方面的不完整,必须后端给。

    至于界面不好看,能看就行,不行自己改。

    至于不好使,这个问题应该前后端沟通,选择对双方都好的,或者是能相互转换的。
    aogg
        31
    aogg  
       2023-07-26 09:41:29 +08:00
    就算是 swagger 不好用,也不是你前端赖后端的原因,逼事真多,前端普片的菜和有问题赖后端
    MENGKE
        32
    MENGKE  
       2023-07-26 09:44:05 +08:00   ❤️ 2
    评论区后端集体破防
    BG7ZAG
        33
    BG7ZAG  
       2023-07-26 09:46:53 +08:00
    直接用 apifox 、yapi 等工具自行导入,swagger 有提供 json 链接的,设置自动同步,不知道多香,apifox 还有 ts 类型生成
    securityCoding
        34
    securityCoding  
       2023-07-26 09:46:59 +08:00 via Android
    自己去看 pb
    wkong
        35
    wkong  
       2023-07-26 09:47:48 +08:00
    我们都是手撸 swagger

    https://github.com/TangSengDaoDao/TangSengDaoDaoServer/tree/main/assets/swagger

    我们开源的商用级别的即时通讯软件
    tsanie
        36
    tsanie  
       2023-07-26 09:49:07 +08:00
    konakona
        37
    konakona  
       2023-07-26 09:49:33 +08:00
    swagger 的 yaml 可以导入 apifox 、postman 。
    brader
        38
    brader  
       2023-07-26 09:52:52 +08:00
    swagger 也是文档,你可以说它丑,但是说没给文档就过分了,颠倒黑白
    uni
        39
    uni  
       2023-07-26 09:54:28 +08:00
    普通的系统全员全栈才是正解,沟通成本太高了
    jorneyr
        40
    jorneyr  
       2023-07-26 09:54:37 +08:00
    我认为 swagger 的丑不只是说界面丑,而是很多地方不够好用,并且污染 controller ,例如不能很好的处理响应有成功、失败,成功情况 1 的响应结构,成功情况 2 的响应结构 (很多人的接口就这么干),对结构里特殊字段的描述,响应示例等。
    oppoic
        41
    oppoic  
       2023-07-26 09:54:52 +08:00   ❤️ 2
    楼主的图,你这是 swagger ?


    花里胡哨随着时间推移都废弃了,还是 swagger 这种能实时读取的能持久下去。看不懂让后端好好学学,swagger 非常灵活

    最后,V 站传图的正确姿势: https://www.v2ex.com/t/846267
    unt
        42
    unt  
    OP
       2023-07-26 09:58:30 +08:00
    @uni #39 对,是的,我现在很多接口自己写了,沟通成本太高了。自己写要快得多
    theyzw
        43
    theyzw  
       2023-07-26 10:01:39 +08:00
    swagger 的 ui 不好看是真的,换个皮用 knife4j
    keppelfei
        44
    keppelfei  
       2023-07-26 10:20:12 +08:00
    你应该问,后端不写注释或者更靠谱,openai 有的是靠注释、注解来生成 swagger 的
    gynantim
        45
    gynantim  
       2023-07-26 10:21:40 +08:00 via iPhone
    自己看代码,自己改后端
    wizzer
        46
    wizzer  
       2023-07-26 10:23:11 +08:00   ❤️ 1
    swagger 的界面可以自己改改嘛,比如我改的:

    https://demo.budwk.com/api/openapi/#/load/openapi.json
    TingFengShuo
        47
    TingFengShuo  
       2023-07-26 10:25:48 +08:00
    都给你写 swagger 了知足吧
    nerkeler
        48
    nerkeler  
       2023-07-26 10:44:56 +08:00
    我还以为没给接口文档呢,文档描述不清楚可以找后端描述清楚,文档不好看?基础的样式就是最好的选择,花里胡哨的,你喜欢万一其他人嫌弃呢?还狗都不看。我遇到的前端都是想把问题抛给后端,一个入参格式转换都不想做。
    unt
        49
    unt  
    OP
       2023-07-26 10:45:14 +08:00
    @TingFengShuo #47 文档属于公司资产啊,我为公司考虑,我自己手里是有适合自己的文档( insomnia )的
    StateMa
        50
    StateMa  
       2023-07-26 10:55:10 +08:00
    看见没 头顶就有个魔幻生物哎,op 说了后端文档不清晰,接口调试时间成本高,到你嘴里就成菜了?

    我感觉能力不是主要问题,傲慢才是。

    合着把自己的本职工作甩出去包装成能力不足就是本事强啊?张口一个抛开事实不谈味太冲了,下次发表前记着看看回复框右下角的字。


    @aogg
    cooper
        51
    cooper  
       2023-07-26 11:03:20 +08:00
    我们之前是前端定义接口。 先定义,mock ,最后对接。
    me1onsoda
        52
    me1onsoda  
       2023-07-26 11:16:02 +08:00
    @StateMa 你才是魔幻生物吧? op 是正文还是标题体现了你说的“op 说了后端文档不清晰,接口调试时间成本高”?自己刚开始说的嫌弃丑陋,说着说着又变成文档不清晰。op 自己这表达能力嫌弃别人文档不清晰也是挺乐的
    version
        53
    version  
       2023-07-26 11:20:42 +08:00   ❤️ 3
    swagger 如果服务端注释生成的..那可读性是很差的.基本和没文档差不多..
    提供的模型定义基本没啥用.crud 的接口可能服务端自己都没测试过..

    还有就是 业务需求..后端自己都不提供模拟数据参数.只顾说文档和接口已经提供.自己摸索
    当前端辛苦查看文档.模拟出数据插入的时候..发现报错了..问后端..后端答复是查看下日志..是 bug.改了.等几分钟部署再试试.

    目前大部分现状就是这样...别问我怎么知道的.我遇到的很多 java 老都这样..所以我害怕和 java 对接.

    最后我不是前端..我是后端..我不想成为上面说的那种人.都会提供字段文档+postman+业务页面案例假数据
    fantathat
        54
    fantathat  
       2023-07-26 11:27:10 +08:00
    替后端说两句,swagger 本身没问题,问题是后端没有按照 restful 和 swagger 规范来,就是一个大 json ,出了问题找不到人,没有人来配合前端。我去,怎么感觉是在替 swagger 说了两句
    zqguo
        55
    zqguo  
       2023-07-26 11:27:55 +08:00
    这个要向上反馈,像我们后端在 ERD 评审完成之后就需要进行接口设计,设计好之后和前端做接口评审,接口编写有一个专门编写的平台,这个流程要集成到项目流程规范,有流程、规范这个事就好执行了。
    zqguo
        56
    zqguo  
       2023-07-26 11:29:51 +08:00
    评论区戾气太重,互相攻击意义在哪里,把问题暴露出来,想办法怎么解决,更好的协同不都是为了大家工作舒服些,减少点沟通成本?
    barbery
        57
    barbery  
       2023-07-26 11:33:06 +08:00   ❤️ 1
    我们用的是 graphql ,可以自动生成文档,字段类型和注释都有说明
    LeonardSc
        58
    LeonardSc  
       2023-07-26 11:35:59 +08:00
    向上反馈
    buffzty
        59
    buffzty  
       2023-07-26 11:40:03 +08:00
    我是直接共享一个 postman 账号出去,所有人都在里面看,postman 请求数据可以注释 比文档方便多了
    StateMa
        60
    StateMa  
       2023-07-26 11:46:17 +08:00
    @me1onsoda 合着后面的补充不是 op 是吧,那后面 op 说的选择性无视?
    tudou527
        61
    tudou527  
       2023-07-26 13:11:48 +08:00
    当时做 oneapi.app 的一个原因就不想被这种事情卡住。只要后端的代码他们自己能看懂前端就能用
    chf007
        62
    chf007  
       2023-07-26 13:24:34 +08:00
    swagger 就够了呀,只是美丑的问题,又不是没有接口文档
    lovelylain
        63
    lovelylain  
       2023-07-26 13:33:31 +08:00 via Android
    proto 即文档,字段与功能一致,标清楚字段含义哪些必填哪些选填。想要单独的文档我是反对的,文档与接口定义分离的后果往往就是文档不及时更新,然后 OP 又要发帖,后端不及时更新 api 文档怎么办。
    zhang77555
        64
    zhang77555  
       2023-07-26 13:34:44 +08:00
    不用解决,有锅直接甩
    huajia2005
        65
    huajia2005  
       2023-07-26 13:37:54 +08:00
    swagger 这种感觉侵入性太强了,目前用的是 smrt-doc,通过注释生成 html 或者 swagger 以及 postman,都是 java doc 注释,没啥侵入性
    https://github.com/smart-doc-group/smart-doc
    miaotaizi
        66
    miaotaizi  
       2023-07-26 13:40:20 +08:00   ❤️ 1
    @unt 为公司考虑, 你是要笑死我, 然后公司把你开了
    skiy
        67
    skiy  
       2023-07-26 13:43:24 +08:00
    rap2.taobao.org BUG 虽然多了点,但勉强能用。数据要动态扩展的另说。
    wanniwa
        68
    wanniwa  
       2023-07-26 13:44:17 +08:00
    可以让后端接一下这个 https://doc.xiaominfo.com/ ,swagger 的一个新的 ui
    th00000
        69
    th00000  
       2023-07-26 14:00:08 +08:00
    "Swagger 狗都不看",你再骂!
    xausky
        70
    xausky  
       2023-07-26 14:52:25 +08:00
    虽然不说精通,前端也稍微懂点后端吧,后端也稍微懂点前端吧,像我们这边接口文档一般用 swagger 的 json 导入到 apifox 给前端,有时候前端着急都直接去看看 Controller 就完了,有时候后端接口有小的改动也可以前端代码里面一搜索一起改了就好了,人人都只管自己端的东西,然后要求对方给完美的交付物的话那中间连接这块就是事多。
    1044523901
        71
    1044523901  
       2023-07-26 17:06:58 +08:00
    "Swagger 狗都不看",再骂!
    aino
        72
    aino  
       2023-07-26 17:08:52 +08:00
    直接后端代码丢给前端去对接,代码就是最好的接口文档😆
    xiaoHuaJia
        73
    xiaoHuaJia  
       2023-07-26 17:16:30 +08:00   ❤️ 1
    swagger 文档都给了,稍微在问一下沟通一下,互相包含以下的事情,还在这里抱怨,那只能后端都学一下前端,直接挤掉前端岗位,前端学后端直接挤掉后端岗位,无沟通成本。开卷
    daimubai
        74
    daimubai  
       2023-07-26 18:07:43 +08:00
    连个 swagger 都看不明白吗。。。
    sampeng
        75
    sampeng  
       2023-07-26 18:09:07 +08:00
    @unt 那不是 swagger 的问题。。是人的问题。找后端 leader 说,这样不行。要改。我见过很多后端图省事把数据库直接反回来,前端自己挑自己用的。。然后零注释
    xiaowei7777
        76
    xiaowei7777  
       2023-07-26 18:15:28 +08:00
    swagger 都没得你见过吗?
    yrzs
        77
    yrzs  
       2023-07-26 18:29:37 +08:00
    作为后端 我直接生成 ts 包,连所有的 interface 每个字段都有注释,直接调用就完事。
    Rehtt
        78
    Rehtt  
       2023-07-26 19:04:16 +08:00
    生成 swagger 拖到 yapi 就好了
    PendingOni
        79
    PendingOni  
       2023-07-26 19:12:59 +08:00
    记得之前项目接口文档都是在 ApiFox 上谁开发的接口谁写文档 与其和 swagger 这种工具死磕不如换一种管理思路
    tairan2006
        80
    tairan2006  
       2023-07-26 19:58:15 +08:00 via Android
    我不爱用 swagger ,而且我一般是先写文档后开发的。不然让前端等接口?
    CQdake
        81
    CQdake  
       2023-07-26 20:00:03 +08:00
    这个请求参数我感觉挺清晰的啊,有啥不明白?可能是这个接口比较简单?
    Jinnn
        82
    Jinnn  
       2023-07-26 20:02:08 +08:00
    有 swagger 了就好办,我在前端项目定期抓 swagger 生成的配置文件,把接口入参和返回转换为 ts 类型定义,写项目很舒服了
    hansomeneil
        83
    hansomeneil  
       2023-07-26 20:14:34 +08:00
    @owen800q #1 真要是忙到不写文档,或者压根没有写文档的硬要求,那他给你元数据让你自己生成 api 文档,那也不敢用啊。。。太不稳定了,他改你也得改
    hansomeneil
        84
    hansomeneil  
       2023-07-26 20:15:24 +08:00
    @owen800q #1 这问题太大了,肯定要说道说道的
    unt
        85
    unt  
    OP
       2023-07-26 21:11:48 +08:00
    @buffzty #59 这也是个办法,这个就叫做“协同”,只不过是共享的一个账号而已
    lxy
        86
    lxy  
       2023-07-26 22:18:44 +08:00
    editor.swagger.io 各种注释 swagger 示例都可以做到,只是后端不愿意写罢了,我估计他只加了注解,其它什么也没写。
    happy321
        87
    happy321  
       2023-07-26 22:21:50 +08:00 via iPhone
    我们前端也会自己写接口,就是他也不提供文档了
    iseki
        88
    iseki  
       2023-07-26 22:33:36 +08:00 via Android
    swagger 是个工具,文档规范新的现在叫 OpenAPI ,一般说 swagger 文档都是这个,工具你可以自己选
    EvaCcino
        89
    EvaCcino  
       2023-07-27 00:32:31 +08:00
    前后端直接改用 Protobuf
    vHypnos
        90
    vHypnos  
       2023-07-27 06:10:46 +08:00 via iPhone
    有 swagger 的话,我觉得不能说没有文档,还有比 swagger 更好用的吗
    xudaxian520bsz
        91
    xudaxian520bsz  
       2023-07-27 08:13:55 +08:00
    额,RunnerGo 才是解决方案
    ghost024
        92
    ghost024  
       2023-07-27 08:41:34 +08:00
    我们组是如果不写接口文档的话,前端直接就开操了,所以所有人对接的时候,先出文档,再说对接的事情,而且请求参数和返回参数分有必须参数和非必须参数两种,反正开发之前,先写文档都得一天多。。。。。(然后如果接口改了,还得同步去改文档)
    afutureus
        93
    afutureus  
       2023-07-27 09:18:06 +08:00
    用的 Apifox ...
    AmaQuinton
        94
    AmaQuinton  
       2023-07-27 09:36:44 +08:00
    1. 如果给外部调用,给其他公司使用,都会写接口文档,加测试示例
    2. 如果公司同事提供,那就先 postman 调试没有问题,导出后发出,有问题再沟通就行
    dif
        95
    dif  
       2023-07-27 09:49:08 +08:00
    swagger 有个好处是会实时更新,word/markdown 文档需要依赖人工更新得,闲的时候还行,改一个接口同步一下文档,忙的时候就顾不上了,久而久之,文档与代码基本上落下好几个版本。
    没有完美的解决方案,前后端多沟通吧
    leichnX
        96
    leichnX  
       2023-07-27 10:14:20 +08:00
    转行做全栈,自己负责的功能,前后端都自己上,不扯皮,接口爱咋定义就怎么来,爱咋写咋写(前提是能过代码审查)
    mcluyu
        97
    mcluyu  
       2023-07-27 11:04:42 +08:00
    笑死了,评论区一堆连接口文档都写不明白甚至不写懒得写的还好意思出来现眼。。。屎山不就是这样堆出来的,注释没有,文档没有。。。 说人代码屎山的和自己疯狂堆屎的往往是一批人
    wangritian
        98
    wangritian  
       2023-07-27 11:10:48 +08:00
    swagger 不是用来看的,是用来自动生成 sdk 的
    对接过 go java python react ,他们的 sdk 都是我写工具生成的
    接口函数,输入输出对象,和所有的注释全都有
    sdjl
        99
    sdjl  
       2023-07-27 11:15:38 +08:00
    后端不写文档的原因只有一个:“我凭啥给你?”
    iosyyy
        100
    iosyyy  
       2023-07-27 11:21:54 +08:00
    你让后端用 apifox 做测试 自动就会有个文档了
    1  2  
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2742 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 10:09 · PVG 18:09 · LAX 02:09 · JFK 05:09
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.