当前位置: 首页 > article >正文

在Swagger(现称为OpenAPI)中各类@api之间的区别

在Swagger(现称为OpenAPI)中,@ApiOperation 是用来描述单个API操作的注解。除此之外,Swagger还提供了其他一些类似的注解,它们用于不同层次或目的来增强API文档的详细程度和可读性。以下是这些注解及其之间的区别:

1. @Api

  • 用途:描述整个控制器类的功能。
  • 位置:应用于控制器类上。
  • 属性
    • tags:为该控制器定义标签,方便分类管理。
    • description:提供对该控制器的简短描述。
    • value:与tags类似,但通常作为主要标签使用。
示例
@Api(tags = "用户管理接口", description = "包含所有用户相关的API操作")
@RestController
@RequestMapping("/api/users")
public class UserController {
    // ...
}

2. @ApiOperation

  • 用途:描述一个具体的API操作(即一个HTTP请求处理方法)。
  • 位置:应用于控制器中的方法上。
  • 属性
    • value:API操作的简短标题或摘要。
    • notes:API操作的详细说明或备注信息。
    • response:指定响应的数据类型。
    • httpMethod:指定HTTP方法(GET、POST等),通常从方法上的HTTP注解推断出来。
    • tags:为该API操作定义标签,可以是多个。
示例
@ApiOperation(value = "获取用户列表", notes = "返回所有用户的列表")
@GetMapping("/list")
public List<User> getUsers() {
    // ...
}

3. @ApiParam

  • 用途:描述方法参数的信息,特别是那些不在方法签名中显式声明的参数,如查询参数、路径变量、请求头等。
  • 位置:应用于方法参数上。
  • 属性
    • value:参数的描述。
    • name:参数名。
    • required:是否必需。
    • defaultValue:默认值。
    • allowableValues:允许的值范围。
示例
@ApiOperation(value = "根据ID获取用户详情")
@GetMapping("/{id}")
public User getUserById(@ApiParam(value = "用户ID", required = true) @PathVariable Long id) {
    // ...
}

4. @ApiResponse@ApiResponses

  • 用途:描述API操作可能产生的响应信息,包括状态码、消息、响应体的数据类型等。
  • 位置:应用于方法上,通常与@ApiOperation一起使用。
  • 属性
    • code:HTTP状态码。
    • message:对响应的简短描述。
    • response:响应的数据类型。
    • responseContainer:当返回集合时,指定容器类型(如List, Set等)。
示例
@ApiOperation(value = "创建新用户")
@ApiResponses({
    @ApiResponse(code = 201, message = "用户创建成功", response = User.class),
    @ApiResponse(code = 400, message = "无效的输入数据"),
    @ApiResponse(code = 500, message = "服务器内部错误")
})
@PostMapping
public ResponseEntity<User> createUser(@RequestBody User user) {
    // ...
}

5. @ApiImplicitParam@ApiImplicitParams

  • 用途:用于描述API操作的隐式参数信息,特别是那些不直接出现在方法签名中的参数,如查询参数、表单参数、请求头等。
  • 位置:应用于方法上,通常与@ApiOperation一起使用。
  • 属性
    • name:参数名。
    • value:参数的描述。
    • required:是否必需。
    • paramType:参数类型(如query, header, path等)。
    • dataType:参数的数据类型。
示例
@ApiOperation(value = "搜索用户")
@ApiImplicitParams({
    @ApiImplicitParam(name = "name", value = "用户名", paramType = "query", dataType = "String"),
    @ApiImplicitParam(name = "age", value = "用户年龄", paramType = "query", dataType = "Integer")
})
@GetMapping("/search")
public List<User> searchUsers(@RequestParam(required = false) String name,
                              @RequestParam(required = false) Integer age) {
    // ...
}

总结

这些注解共同作用于不同的层面,以提供全面且详细的API文档:

  • @Api:为整个控制器类提供高层次的描述。
  • @ApiOperation:针对每个具体的方法,描述其功能和用途。
  • @ApiParam@ApiImplicitParam:详细描述方法参数和隐式参数。
  • @ApiResponse@ApiResponses:描述API操作可能产生的各种响应情况。

通过合理使用这些注解,开发者可以生成结构清晰、易于理解的API文档,这不仅有助于团队内部的协作,也能为外部用户提供更好的指导和支持。


http://www.kler.cn/a/464171.html

相关文章:

  • React 中结合 antd 的 Input 组件实现防抖输入
  • Swift Combine 学习(五):Backpressure和 Scheduler
  • Mac 安装 Flutter 提示 A network error occurred while checking
  • Appium 2.0:移动自动化测试的革新之旅
  • 38 Opencv HOG特征检测
  • 沙箱模拟支付宝支付3--支付的实现
  • k8s系列--docker拉取镜像导入k8s的containerd中
  • HTML——56.表单发送
  • 从零开始学桶排序:Java 示例与优化建议
  • 2025.01.02 一月 | 充分地接受生活本身
  • python中常用的内置函数介绍
  • Java开发工具-Jar命令
  • 面试经典问题 —— 链表之返回倒数第k个节点(经典的双指针问题)
  • RK3568适配美格(MEIG-SLM3XX)4G模块
  • JavaWeb开发(五)Servlet-ServletContext
  • 大数据-266 实时数仓 - Canal 对接 Kafka 客户端测试
  • 数字图像总复习
  • ubuntu切换到root用户
  • 【C++动态规划】2088. 统计农场中肥沃金字塔的数目|2104
  • C++11右值与列表初始化
  • Redis数据库主要数据结构类型
  • 【HarmonyOS之旅】ArkTS语法(四) -> 使用限制与扩展
  • 使用爬虫技术获取网页中的半结构化数据
  • 算法-判断一个数是不是3的次幂
  • 解决cookie跳转页面失效等问题
  • 大屏深色系 UI 设计:点亮科技与艺术的融合之光