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用于我们的内部需求,因此我们致力于维护它,但我们不能提供任何额外的保证。使用时请自行承担风险。

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

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

编辑推荐精选

Vora

Vora

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

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

Refly.AI

Refly.AI

最适合小白的AI自动化工作流平台

无需编码,轻松生成可复用、可变现的AI自动化工作流

酷表ChatExcel

酷表ChatExcel

大模型驱动的Excel数据处理工具

基于大模型交互的表格处理系统,允许用户通过对话方式完成数据整理和可视化分析。系统采用机器学习算法解析用户指令,自动执行排序、公式计算和数据透视等操作,支持多种文件格式导入导出。数据处理响应速度保持在0.8秒以内,支持超过100万行数据的即时分析。

AI工具酷表ChatExcelAI智能客服AI营销产品使用教程
TRAE编程

TRAE编程

AI辅助编程,代码自动修复

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

AI工具TraeAI IDE协作生产力转型热门
AIWritePaper论文写作

AIWritePaper论文写作

AI论文写作指导平台

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

AI辅助写作AI工具AI论文工具论文写作智能生成大纲数据安全AI助手热门
博思AIPPT

博思AIPPT

AI一键生成PPT,就用博思AIPPT!

博思AIPPT,新一代的AI生成PPT平台,支持智能生成PPT、AI美化PPT、文本&链接生成PPT、导入Word/PDF/Markdown文档生成PPT等,内置海量精美PPT模板,涵盖商务、教育、科技等不同风格,同时针对每个页面提供多种版式,一键自适应切换,完美适配各种办公场景。

AI办公办公工具AI工具博思AIPPTAI生成PPT智能排版海量精品模板AI创作热门
潮际好麦

潮际好麦

AI赋能电商视觉革命,一站式智能商拍平台

潮际好麦深耕服装行业,是国内AI试衣效果最好的软件。使用先进AIGC能力为电商卖家批量提供优质的、低成本的商拍图。合作品牌有Shein、Lazada、安踏、百丽等65个国内外头部品牌,以及国内10万+淘宝、天猫、京东等主流平台的品牌商家,为卖家节省将近85%的出图成本,提升约3倍出图效率,让品牌能够快速上架。

iTerms

iTerms

企业专属的AI法律顾问

iTerms是法大大集团旗下法律子品牌,基于最先进的大语言模型(LLM)、专业的法律知识库和强大的智能体架构,帮助企业扫清合规障碍,筑牢风控防线,成为您企业专属的AI法律顾问。

SimilarWeb流量提升

SimilarWeb流量提升

稳定高效的流量提升解决方案,助力品牌曝光

稳定高效的流量提升解决方案,助力品牌曝光

Sora2视频免费生成

Sora2视频免费生成

最新版Sora2模型免费使用,一键生成无水印视频

最新版Sora2模型免费使用,一键生成无水印视频

下拉加载更多