apidoc 完全指南:如何配置 JSON 提交方式**
在 API 开发过程中,清晰、规范的文档是团队协作和前后端对接的关键,apidoc 作为一款轻量级且强大的 API 文档生成工具,深受开发者喜爱,它通过解析代码注释来生成文档,支持多种请求参数和响应格式,本文将详细介绍如何在 apidoc 中配置和设置 JSON 提交方式,以确保你的 API 文档准确反映接口的数据交互。
理解 JSON 提交方式
在 HTTP 请求中,JSON(JavaScript Object Notation)是一种常见的数据格式,尤其常用于 RESTful API 的请求体(Request Body)中,客户端通常通过以下两种主要方式发送 JSON 数据:
Content-Type: application/json:这是最标准的方式,表示请求体的数据是 JSON 格式。Content-Type: application/x-www-form-urlencoded:但此时请求体本身是一个 JSON 字符串(而不是键值对),虽然不推荐,但有时也会遇到。
apidoc 允许你在 @api 或 @apiParam 等注释中明确指定参数的类型和来源,从而正确生成 JSON 提交相关的文档。
核心配置:@apiParam 与 @apiBody
在 apidoc 中,要描述 JSON 提交的数据,主要使用 @apiParam 和 @apiBody 这两个注释块。
使用 @apiBody 描述请求体 JSON
当你的 API 接口需要一个完整的 JSON 对象作为请求体时,@apiBody 是最佳选择,它直接用于描述请求体的结构和内容。
语法格式:
@apiBody {Type} [field_name] field_description
{Type}: 这里通常填写JSON或具体的 JSON 结构描述(如Object)。[field_name]: JSON 对象中的字段名,如果是可选参数,用方括号[]括起来。field_description: 字段的描述信息。
示例:
假设我们有一个创建用户的接口,请求体是一个 JSON 对象,包含 username(字符串,必填)、email(字符串,必填)和 age(数字,可选)。
/**
* @api {post} /users 创建新用户
* @apiName CreateUser
* @apiGroup User
*
* @apiBody {Object} user 用户信息对象
* @apiBody {String} user.username 用户名,唯一标识
* @apiBody {String} user.email 用户邮箱
* @apiBody {Number} [user.age] 用户年龄(可选)
*
* @apiSuccess {String} message 创建成功消息
* @apiSuccess {Object} user 创建的用户信息
*/
说明:
@apiBody {Object} user 用户信息对象:这里声明了请求体是一个名为user的 JSON 对象。- 后续的
@apiBody行,通过缩进(apidoc 通常会识别这种层级关系)或明确的前缀(如user.)来描述 JSON 对象内部的字段。 - 这样生成的文档会清晰地展示出请求体的 JSON 结构。
使用 @apiParam 描述 JSON 中的字段
你可能更习惯使用 @apiParam 来描述参数,即使它们位于 JSON 请求体中,这种方式同样可行,关键在于正确指定参数的位置和类型。
语法格式:
@apiParam {Type} [field_name] field_description
对于 JSON 请求体中的字段,通常会在 field_name 前面加上 body. 或 requestBody. 前缀,以表明该参数位于请求体中。
示例(与上面 @apiBody 示例等效):
/**
* @api {post} /users 创建新用户
* @apiName CreateUser
* @apiGroup User
*
* @apiParam {String} body.username 用户名,唯一标识
* @apiParam {String} body.email 用户邮箱
* @apiParam {Number} [body.age] 用户年龄(可选)
*
* @apiSuccess {String} message 创建成功消息
* @apiSuccess {Object} user 创建的用户信息
*/
说明:
- 这里通过
body.前缀明确了username、email和age是请求体中的 JSON 字段。 {Type}部分仍然指明了字段的实际数据类型(String,Number)。- 这种方式在参数较少或需要与其他类型的参数(如 Query Parameter, Path Parameter)混合描述时也很方便。
设置 Content-Type 为 application/json
仅仅描述 JSON 结构还不够,我们还需要告诉文档使用者,这个接口需要发送 Content-Type: application/json 的请求头,这可以通过 @apiHeader 来实现。
示例:
/**
* @api {post} /users 创建新用户
* @apiName CreateUser
* @apiGroup User
*
* @apiHeader {String} Content-Type application/json 请求内容类型
*
* @apiBody {Object} user 用户信息对象
* @apiBody {String} user.username 用户名,唯一标识
* @apiBody {String} user.email 用户邮箱
* @apiBody {Number} [user.age] 用户年龄(可选)
*
* @apiSuccess {String} message 创建成功消息
* @apiSuccess {Object} user 创建的用户信息
*/
说明:
@apiHeader {String} Content-Type application/json 请求内容类型:这一行明确指出了调用该 API 时需要在请求头中包含Content-Type: application/json。- 这对于 API 的使用者来说是非常重要的信息,能确保他们正确构造请求。
完整示例与文档预览
让我们将以上元素组合起来,看一个完整的 apidoc 注释示例,并想象它生成的文档会是什么样子。
/**
* @api {post} /api/v1/products 添加新产品
* @apiVersion 1.0.0
* @apiName AddProduct
* @apiGroup Product
*
* @apiDescription 添加一个新的产品到系统中,请求体为 JSON 格式。
*
* @apiHeader {String} Content-Type application/json 请求内容类型
* @apiHeader {String} Authorization Bearer <token> 认证令牌
*
* @apiBody {Object} product 产品详细信息
* @apiBody {String} product.name 产品名称(必填,2-50字符)
* @apiBody {String} [product.description] 产品描述(可选)
* @apiBody {Number} product.price 产品价格(必填,大于0)
* @apiBody {String} [product.category] 产品分类(可选,如 "电子产品", "服装")
* @apiBody {Boolean} [product.in_stock=true] 是否有货(可选,默认true)
*
* @apiSuccess {String} message 操作成功消息
* @apiSuccess {Object} product 返回创建的产品信息(包含id)
* @apiSuccess {String} product.id 产品ID
* @apiSuccess {Number} status 状态码 (e.g., 201)
*
* @apiError {String} error 错误信息
* @apiError {Number} status 状态码 (e.g., 400, 401, 500)
*
* @apiExample {curl} 示例请求:
* curl -X POST http://your-api-domain.com/api/v1/products \
* -H "Content-Type: application/json" \
* -H "Authorization: Bearer YOUR_TOKEN" \
* -d '{
* "name": "智能手表",
* "description": "具有健康监测功能的智能手表",
* "price": 1299.00,
* "category": "电子产品"
* }'
*
* @apiSuccessExample {json} 成功响应:
* HTTP/1.1 201 Created
* {
* "message": "产品创建成功",
* "product": {
* "id": "prod_123456789",
* "name": "智能手表",
* "description": "具有健康监测功能的智能手表",
* "price": 1299.00,
* "category": "电子产品",
* "in_stock": true
* },
* "status": 201
* }
*
* @apiErrorExample {json} 错误响应 - 参数缺失:
* HTTP/1.1 400 Bad Request
* {
* "error": "产品名称和价格为必填项",
* "status": 400
* }
*/
生成的文档会包含:
- 接口的基本信息(方法、路径、名称、分组)。
- 清晰的“Request body”部分,展示 JSON 对象结构及其字段、类型和描述。
- “Request headers”部分,明确列出
Content-Type: application/json和其他必要的请求头。 - 请求和响应的示例代码,方便开发者理解和使用。
总结与最佳实践
在 apidoc 中



还没有评论,来说两句吧...