Craft 特性
Craft 允许开发者通过简单的注解方式自动生成处理函数和端点,同时与 OpenAPI 文档生成无缝集成。
使用场景
Craft 特性在以下场景特别有用:
- 当你需要从结构体方法快速创建路由处理函数时
- 当你想要减少手动编写参数提取和错误处理的样板代码时
- 当你需要为你的 API 自动生成 OpenAPI 文档时
- 当你希望将业务逻辑与 Web 框架解耦时
基本用法
使用 Craft 特性需要引入以下模块:
创建服务结构体
使用 #[craft] 宏标注你的 impl 块,可以将结构体方法转换为处理函数或端点。
创建处理函数
使用 #[craft(handler)] 将方法转换为处理函数:
这个方法将成为一个处理函数,它:
- 自动从查询参数提取
left和right值 - 访问结构体中的
state状态 - 返回计算结果作为字符串响应
创建端点
使用 #[craft(endpoint)] 将方法转换为端点:
端点可以利用 Arc 来共享状态,这在处理并发请求时特别有用。
静态端点
你也可以创建不依赖于实例状态的静态端点:
在这个例子中,还添加了自定义错误响应的描述,这将反映在生成的 OpenAPI 文档中。
参数提取器
Salvo 的 oapi::extract 模块提供了多种参数提取器,最常见的包括:
QueryParam<T>: 从查询字符串提取参数PathParam<T>: 从URL路径提取参数FormData<T>: 从表单数据提取参数JsonBody<T>: 从JSON请求体提取参数
这些提取器会自动完成参数解析和类型转换,大大简化了处理函数的编写。
与 OpenAPI 集成
Craft 特性能自动生成符合 OpenAPI 规范的 API 文档。在示例中:
这样配置后,API 文档将在 /api-doc/openapi.json 端点提供,Swagger UI 将在 /swagger-ui 路径可用。
完整示例
下面是一个完整的示例,展示了如何使用 Craft 特性创建三个不同类型的端点: