utoipa-redoc

Utoipa build crates.io docs.rs rustc

This crate works as a bridge between utoipa and Redoc OpenAPI visualizer.

Utoipa-redoc provides simple mechanism to transform OpenAPI spec resource to a servable HTML file which can be served via predefined framework integration or used standalone and served manually.

You may find fullsize examples from utoipa's Github repository.

Crate Features

Install

Use Redoc only without any boiler plate implementation. toml [dependencies] utoipa-redoc = "0.1"

Enable actix-web integration with Redoc. toml [dependencies] utoipa-redoc = { version = "0.1", features = ["actix-web"] }

Using standalone

Utoipa-redoc can be used standalone as simply as creating a new Redoc instance and then serving it by what ever means available as text/html from http handler in your favourite web framework.

Redoc::to_html method can be used to convert the Redoc instance to a servable html file. ```rust let redoc = Redoc::new(ApiDoc::openapi());

// Then somewhere in your application that handles http operation. // Make sure you return correct content type text/html. let redochandler = move || async { redoc.tohtml() }; ```

Customization

Utoipa-redoc enables full customizaton support for Redoc according to what can be customized by modifying the HTML template and configuration options.

The default HTML template can be fully overridden to ones liking with Redoc::custom_html method. The HTML template must contain $spec and $config variables which are replaced during Redoc::to_html evaluation.

Overiding the HTML template with a custom one. rust let html = "..."; Redoc::new(ApiDoc::openapi()).custom_html(html);

Configuration

Redoc can be configured with JSON either inlined with the Redoc declaration or loaded from user defined file with FileConfig.

Inlining the configuration. rust Redoc::with_config(ApiDoc::openapi(), || json!({ "disableSearch": true }));

Using FileConfig. rust Redoc::with_config(ApiDoc::openapi(), FileConfig);

Read more details in Config.

Examples

Serve Redoc via actix-web framework. ```rust use actixweb::App; use utoiparedoc::{Redoc, Servable};

App::new().service(Redoc::with_url("/redoc", ApiDoc::openapi())); ```

Serve Redoc via rocket framework. ```rust use utoipa_redoc::{Redoc, Servable};

rocket::build() .mount( "/", Redoc::with_url("/redoc", ApiDoc::openapi()), ); ```

Serve Redoc via axum framework. ```rust use axum::{Router, body::HttpBody}; use utoipa_redoc::{Redoc, Servable};

let app = Router::::new() .merge(Redoc::with_url("/redoc", ApiDoc::openapi())); ```

Use Redoc to serve OpenAPI spec from url. rust Redoc::new( "https://github.com/swagger-api/swagger-petstore/blob/master/src/main/resources/openapi.yaml")

Use Redoc to serve custom OpenAPI spec using serde's json!() macro. rust Redoc::new(json!({"openapi": "3.1.0"}));