后端的大佬们 你们的接口文档注释写道什么程度呀

104 天前
 puzzle9

如题

这是组内另一个同事写的

{
    "code": 200,
    "data": {
        "forum": {
            "forum_id": 1, //帖子 ID
            "user_id": 2, //发帖人 ID
            "content": "仅支持文本输入,简体中文、数字、大小写字母,中英文标点符号", //帖子内容
            "created_at": "2024-12-12 16:28", //发帖时间
            "user_name": "教师", //发帖人名称
            "avatar": "http://127.0.0.1:8000/assets/img/teacher_avatar_default.png" //发帖人头像
        },
        "forumReplyList": {
            "data": [
                {
                    "forum_reply_id": 15, //回复内容 ID
                    "forum_id": 1, //帖子 ID
                    "user_id": 2, //回复用户 ID
                    "content": "又一次回复内容", //回复的内容
                    "created_at": "2024-12-14 22:54", //回复的时间
                    "forum_reply_like_count": 0, //回复的点赞
                    "user_name": "教师", //回复用户的名称
                    "avatar": "http://127.0.0.1:8000/assets/img/teacher_avatar_default.png", //回复用户的头像
                    "reply_user_name": "教师", //被回复的用户名
                    "is_delete": true, //是否是当前用户的回复:true 是当前用户的回复可以删除,false 不是当前用户的回复不能删除
                    "is_like": false //当前用户是否点赞,true 已点赞 false 未点赞
                }
            ],
            "current": 1, //当前页
            "total": 12, //总共的数量
            "size": 10, //当前分页数量
            "has_more_page": true //是否有下一页:true 有下一页 false 没有下一页
        }
    }
}

这是我写的 完全无注释

{
    "code": 200,
    "data": {
        "id": 2,
        "type": "in_select",
        "question_description": "请选择青龙还是白虎",
        "question_images": [],
        "question_options": [
            {
                "description": "青龙",
                "image": null
            },
            {
                "description": "白虎",
                "image": null
            }
        ],
        "student_answer_exists": true,
        "is_can_submit": false,
        "socket_name": "course_interact_1_2"
    }
}
{
    "code": 200,
    "data": [
        {
            "id": 2,
            "body": "顶层",
            "user_type": "teacher",
            "user_nickname": "教师昵称阿",
            "user_avatar": "http://127.0.0.1:8000/assets/img/teacher_avatar_default.png",
            "created_at": "2025-01-07 20:19:38",
            "childs": [
                {
                    "id": 6,
                    "body": "回复 1 的回复 2",
                    "user_type": "student",
                    "user_nickname": "程凤英",
                    "user_avatar": "http://127.0.0.1:8000/assets/img/student_avatar_default.png",
                    "created_at": "2025-01-07 20:20:15",
                    "reply_user_nickname": "金莹"
                },
                {
                    "id": 5,
                    "body": "回复 1 的回复 1",
                    "user_type": "teacher",
                    "user_nickname": "安智渊",
                    "user_avatar": "http://127.0.0.1:8000/assets/img/teacher_avatar_default.png",
                    "created_at": "2025-01-07 20:20:12",
                    "reply_user_nickname": "金莹"
                }
            ]
        }
    ]
}

然后嘛 组内的一个前端 希望我写的清楚一点 标清楚每个字段的含义

我 产生了迷茫

再者

前端的大佬们

你们心中的接口文档是咋样的

5626 次点击
所在节点    程序员
56 条回复
evan1
104 天前
后端,每个字段都有。这是基本的要求。
v21984
104 天前
枚举值的加注释,有多个某 id 的加注释,其它不加
linuxsuren
104 天前
乱入下我的开源接口工具 https://github.com/LinuxSuRen/api-testing
wogogoing
104 天前
不是在代码层面写好注释然后生成 swagger 文档吗?
imdong
104 天前
不写注释鬼知道这个字段是干嘛的,到时候猜错了出 BUG ,是你改还是前端改?

每个字段最少提供一个与前端对应的名称注释,是否必填,数据类型(格式要求),如果是枚举,则提供每个选项的值与对应说明或获取来源。

如果这个结构在其他接口出现过,我会标明该字段内结构与注释以某接口的某字段下结构为准,

例如 forumReplyList 字段下数据,我会标注为 数组内结构为 forumReply{},以接口 /reply/view 的同名结构为准,我在那个接口会明确指定该结构的名称。
zbw0414
104 天前
先用大模型帮我构建一个基础的结构出来,比如根据代码或者 swagger 直接生成完整的文档,再把关键逻辑字段、易混淆的字段自己关注完善一下就行了。这种文档属于那种绝大部分都是废话,见文知意的;但是个别的字段确实比较绕需要特别说明的。如果你没有文档或者写的不细,那到时候真出了问题可能就是你背锅了;但是每个字段都打字又纯属体力活,所以分清主次,善用 AI 就好了。
taoyuanming
104 天前
如果你是前端,后端只给了不清不楚的返回示例,估计你更迷茫
fyxtc
104 天前
自己开发如果你有把握保证字段名清晰明了就可以不用写
比如 user_id 谁都知道是啥
但是 is_delete 对于三个月后的你就丈二和尚了

所以如果是多人协作,保证每个字段清晰注释是必要的,因为你无法保证每个字段命名都能让别人看得懂,而且这种只要写一遍就能让所有人受益(包括你自己),也是基本素养。
4UyQY0ETgHMs77X8
104 天前
部分主要逻辑写注释至于枚举因为模型定义有替换成中文的方法所以也没什么注释,看是合作开发还是自己开发了,自己怎么舒服怎么来,合作基础的语法不用其他该写就写
lvlongxiang199
104 天前
`is_can_submit` 这个命名方式好奇怪啊
mango777
104 天前
你的看字段名就知道含义,你同事的像是在告诉你 1+1=2 、这是鼠标、这是显示器,这种层次
mango777
104 天前
要么就备注在类里,用 swagger 显示字段含义
XCFOX
104 天前
接口用的 GraphQL ,代码里会写详细的字段注释,再用框架生成 GraphQL Schema 。前端直接用 GraphQL Schema 生成接口 SDK ,确保端对端类型安全。
pollux
104 天前
@wogogoing @zbw0414 swagger +1 ,就喜欢用 fastapi / robyn 这种带有 openapi/swagger 文档输出的,简洁明了还能直接在线测试
Akkuman
104 天前
openapi
kneo
104 天前
文档有很多方式,不一定通过注释的方式。一边来说数据清楚是不需要每个字段都注释的。
而“希望我写的清楚一点 标清楚每个字段的含义”这种建议也缺乏指引,哪个字段有什么歧义需要具体指出来。一句“写详细点”犯了和“文档不详细”一样的错误。

比如:

type 除了 in_select 还有什么值?
question_images 为什么是空的?为什么是个数组?正常应该放几个 image ?
options 的 image 为什么是 null ,支持的格式是什么?
什么叫 student_answer_exists ?是和别的学生的答案冲突的意思?
is_can_submit 是什么意思?什么情况会是 false ?
socket_name 是什么意思?

id 为什么选择 2 ?是全局唯一的吗?如果是全局唯一的为什么不选择一个很大的数字做例子?如果会话内的序列为什么不是从 1 或者 0 开始?
什么是“回复 1 的回复 2”? id 为 2 的回复是回复 1 吗?
金莹是谁?是 id 为 2 ,user_nickname 为"教师昵称阿"的 nickname ?
created_at 的时区是什么?
blackmatch
104 天前
既然是接口文档,我建议是不要用代码注释的方式去解释字段,而是分开来写,代码只是一个返回示例即可;另外是否需要每个字段都解释具体还得看场景,如果是公司内部前后端协作,有个固定的风格习惯后,一些通用字段(比如 id 、total )可以不用每个接口都解释,如果是公开 API 或者交付给外部的 API 越详细越好。
CyouYamato
103 天前
让 AI 加上注释又不需要花你多少时间.
ty29022
103 天前
我不能接受 childs
Gilfoyle26
103 天前
后端:什么是注释???

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://yangjunhui.monster/t/1113551

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX