OpenAPI
1 min read
The OpenAPI Specification is a specification for a machine-readable interface definition language for describing, producing, consuming and visualizing web services.

Usage with Rust
The rust crate utoipa allows auto-generating the OpenAPI specification.

Models
rust
use utoipa::ToSchema;

#[derive(ToSchema)]
struct Book {
id: u32,
title: String,
author: String,
}

API Path

rust
use utoipa::OpenApi;

#[utoipa::path(
get,
path = "/book/{id}",
responses(
(status = 200, description = "Book found", body = Book),
(status = 404, description = "Book not found")
),
params(
("id" = u32, Path, description = "Book ID")
)
)]
async fn get_book(id: u32) -> Option<Book> {
// implementation here
// returning Some or None
}

Full Spec

rust
#[derive(OpenApi)]
#[openapi(paths(get_book), components(schemas(Book)))]
struct ApiDoc;

fn main() {
let openapi = ApiDoc::openapi();
println!("{}", serde_json::to_string_pretty(&openapi).unwrap());
}

Tools
A comprehensive list of tools can be found here.