apistos

apistos

Rust 生态系统中的 OpenAPI 3.0 文档生成工具

Apistos 是一个为 Rust 生态系统设计的 OpenAPI 文档工具,主要用于生成 OpenAPI 3.0 规范文档。该工具为 actix-web 框架提供了封装,类似于 paperclip 的功能。Apistos 由多个子模块组成,包括核心模型、宏工具和插件系统等。它支持输入验证、权限控制,并能与 RapiDoc、Redoc 和 Swagger UI 等文档展示工具无缝集成。Apistos 简化了 API 文档的生成流程,适用于各类 Rust Web 开发项目。

ApistosOpenAPIactix-webRustAPI文档Github开源项目

Apistos   文档 最新版本 构建状态 依赖状态

一个OpenAPI文档工具,暴露OAS 3.0模型,以及类似于paperclip的actix-web包装器。

Apistos由以下crate组成:

查看我们的示例项目

Apistos的含义

Apistos(发音为/a.p.i.stos/)是赫菲斯托斯(Ἥφαιστος,希腊神话中的铁匠、木匠、工匠和冶金之神,也被一些人视为技术之神)和API(在法语中发音为/a.p.i/)之间的文字游戏。

Apistos

安装

[dependencies] #schemars = "0.8" # 遗憾的是,我们目前依赖于一个分支来修复枚举的多重展平问题,相关PR可以在这里找到:https://github.com/GREsau/schemars/pull/264 schemars = { package = "apistos-schemars", version = "0.8" } apistos = "0.3"

使用示例

使用apistos类型包装你的常规actix-web应用。

这些类型大多数都是actix-web类型的直接替代品。

use std::fmt::Display; use actix_web::{App, HttpServer, ResponseError}; use actix_web::http::StatusCode; use actix_web::middleware::Logger; use actix_web::web::Json; use apistos::actix::CreatedJson; use apistos::api_operation; use apistos::ApiComponent; use apistos::ApiErrorComponent; use apistos::app::OpenApiWrapper; use apistos::spec::Spec; use apistos::web::{post, resource, scope}; use apistos_models::info::Info; use core::fmt::Formatter; use schemars::JsonSchema; use serde::{Deserialize, Serialize}; use std::error::Error; use std::net::Ipv4Addr; #[derive(Serialize, Deserialize, Debug, Clone, JsonSchema, ApiComponent)] pub struct Test { pub test: String } #[derive(Serialize, Deserialize, Debug, Clone, ApiErrorComponent)] #[openapi_error( status(code = 403), status(code = 404), status(code = 405, description = "Invalid input"), status(code = 409) )] pub enum ErrorResponse { MethodNotAllowed(String), NotFound(String), Conflict(String), Unauthorized(String), } impl Display for ErrorResponse { fn fmt(&self, _f: &mut Formatter<'_>) -> std::fmt::Result { todo!() } } impl ResponseError for ErrorResponse { fn status_code(&self) -> StatusCode { todo!() } } #[api_operation( tag = "pet", summary = "Add a new pet to the store", description = r###"Add a new pet to the store Plop"###, error_code = 405 )] pub(crate) async fn test( body: Json<Test>, ) -> Result<CreatedJson<Test>, ErrorResponse> { Ok(CreatedJson(body.0)) } #[actix_web::main] async fn main() -> Result<(), impl Error> { HttpServer::new(move || { let spec = Spec { info: Info { title: "An API".to_string(), version: "1.0.0".to_string(), ..Default::default() }, ..Default::default() }; App::new() .document(spec) .wrap(Logger::default()) .service(scope("/test") .service( resource("") .route(post().to(test)) ) ) .build("/openapi.json") }) .bind((Ipv4Addr::UNSPECIFIED, 8080))? .run() .await }

完整示例请参见示例宠物商店

功能标志

名称描述额外依赖
query (默认)启用actix_web::web::Query的文档生成
actix (默认)启用actix类型的文档生成
lab_query启用actix_web_lab::extract::Query的文档生成actix-web-lab
garde通过garde启用输入验证garde
actix-web-grants启用actix-web-grants支持actix-web-grants
rapidoc启用RapiDoc以暴露生成的openapi文件
redoc启用Redoc以暴露生成的openapi文件
swagger-ui启用Swagger UI以暴露生成的openapi文件
qs_query启用serde_qs类型的文档生成serde_qs
chrono启用chrono类型的文档生成chrono
multipart启用actix-multipart类型的文档生成actix-multipart
rust_decimal启用rust_decimal类型的文档生成rust_decimal
uuid启用uuid类型的文档生成uuid
url启用url类型的文档生成url
extras启用chronomultipartrust_decimaluuidurl功能所有前述功能的依赖

未来计划

  • 使用ApiErrorComponent派生宏处理错误的模式

替代方案

Crate主要区别
paperclipPaperclip与本项目类似,但生成Swagger v2文档。Paperclip还提供了一个从Swagger v2文档生成rust代码的工具。
utoipaUtoipa-actix集成依赖于actix web macros进行路由定义。起初,我们计划依赖utoipa来处理OAS类型和模式推导,但目前utoipa不支持我们预期的泛型结构
okapi非常相似,同样基于schemars(并由schemars的创始人维护),但未与actix集成。

文章

关于我们

apistos由Netwo提供。

我们将这个crate用于我们的内部需求,因此我们致力于维护它,但我们不能提供任何额外的保证。使用时请自行承担风险。

虽然我们不会投资于我们不需要的任何功能,但我们欢迎接受你可能提出的任何拉取请求。

我们是一家总部位于法国的全远程公司,在电信行业运营。如果你有兴趣了解更多,请随时访问我们的职业页面

编辑推荐精选

音述AI

音述AI

全球首个AI音乐社区

音述AI是全球首个AI音乐社区,致力让每个人都能用音乐表达自我。音述AI提供零门槛AI创作工具,独创GETI法则帮助用户精准定义音乐风格,AI润色功能支持自动优化作品质感。音述AI支持交流讨论、二次创作与价值变现。针对中文用户的语言习惯与文化背景进行专门优化,支持国风融合、C-pop等本土音乐标签,让技术更好地承载人文表达。

QoderWork

QoderWork

阿里Qoder团队推出的桌面端AI智能体

QoderWork 是阿里推出的本地优先桌面 AI 智能体,适配 macOS14+/Windows10+,以自然语言交互实现文件管理、数据分析、AI 视觉生成、浏览器自动化等办公任务,自主拆解执行复杂工作流,数据本地运行零上传,技能市场可无限扩展,是高效的 Agentic 生产力办公助手。

lynote.ai

lynote.ai

一站式搞定所有学习需求

不再被海量信息淹没,开始真正理解知识。Lynote 可摘要 YouTube 视频、PDF、文章等内容。即时创建笔记,检测 AI 内容并下载资料,将您的学习效率提升 10 倍。

AniShort

AniShort

为AI短剧协作而生

专为AI短剧协作而生的AniShort正式发布,深度重构AI短剧全流程生产模式,整合创意策划、制作执行、实时协作、在线审片、资产复用等全链路功能,独创无限画布、双轨并行工业化工作流与Ani智能体助手,集成多款主流AI大模型,破解素材零散、版本混乱、沟通低效等行业痛点,助力3人团队效率提升800%,打造标准化、可追溯的AI短剧量产体系,是AI短剧团队协同创作、提升制作效率的核心工具。

seedancetwo2.0

seedancetwo2.0

能听懂你表达的视频模型

Seedance two是基于seedance2.0的中国大模型,支持图像、视频、音频、文本四种模态输入,表达方式更丰富,生成也更可控。

nano-banana纳米香蕉中文站

nano-banana纳米香蕉中文站

国内直接访问,限时3折

输入简单文字,生成想要的图片,纳米香蕉中文站基于 Google 模型的 AI 图片生成网站,支持文字生图、图生图。官网价格限时3折活动

扣子-AI办公

扣子-AI办公

职场AI,就用扣子

AI办公助手,复杂任务高效处理。办公效率低?扣子空间AI助手支持播客生成、PPT制作、网页开发及报告写作,覆盖科研、商业、舆情等领域的专家Agent 7x24小时响应,生活工作无缝切换,提升50%效率!

堆友

堆友

多风格AI绘画神器

堆友平台由阿里巴巴设计团队创建,作为一款AI驱动的设计工具,专为设计师提供一站式增长服务。功能覆盖海量3D素材、AI绘画、实时渲染以及专业抠图,显著提升设计品质和效率。平台不仅提供工具,还是一个促进创意交流和个人发展的空间,界面友好,适合所有级别的设计师和创意工作者。

图像生成AI工具AI反应堆AI工具箱AI绘画GOAI艺术字堆友相机AI图像热门
码上飞

码上飞

零代码AI应用开发平台

零代码AI应用开发平台,用户只需一句话简单描述需求,AI能自动生成小程序、APP或H5网页应用,无需编写代码。

Vora

Vora

免费创建高清无水印Sora视频

Vora是一个免费创建高清无水印Sora视频的AI工具

下拉加载更多