#rocket #openapi #swagger #json-response #request-response #serde-json #rust

rocket_okapi_fork

为Rocket应用程序生成OpenAPI(又称Swagger)文档,从rocket_okapi分支而来

4个版本

0.7.4 2021年8月2日
0.7.3 2021年8月2日
0.7.2 2021年7月15日
0.7.1 2021年7月7日

#1216 in 编码

MIT 许可证

2MB
1.5K SLoC

此项目旨在启用自动渲染openapi.json文件,并提供同时提供文档的设施。

使用方法

首先,将以下行添加到您的Cargo.toml

[dependencies]
rocket_okapi = "0.5"
schemars = "0.8"
okapi = { version = "0.5", features = ["derive_json_schema"] }

要将文档添加到一组端点,需要几个步骤。端点的请求和响应类型必须实现JsonSchema。其次,函数必须带有#[openapi]标记。之后,您只需将routes!替换为routes_with_openapi!。这将向结果Vec<Route>中添加一个额外的路由,其中包含Swagger所需的openapi.json文件。现在我们已经有了所需的json文件,我们可以在另一个端点提供swagger网络界面,并且应该能够在浏览器中加载示例!

示例

use rocket::get;
use rocket::serde::json::Json;
use rocket_okapi::{openapi, routes_with_openapi, JsonSchema};
use rocket_okapi::swagger_ui::{make_swagger_ui, SwaggerUIConfig};

#[derive(serde::Serialize, JsonSchema)]
struct Response {
    reply: String,
}

#[openapi]
#[get("/")]
fn my_controller() -> Json<Response> {
    Json(Response {
        reply: "show me the docs!".to_string(),
    })
}

fn get_docs() -> SwaggerUIConfig {
    use rocket_okapi::swagger_ui::UrlObject;

    SwaggerUIConfig {
        url: "/my_resource/openapi.json".to_string(),
        urls: vec![UrlObject::new("My Resource", "/v1/company/openapi.json")],
        ..Default::default()
    }
}

fn main() {
    rocket::build()
        .mount("/my_resource", routes_with_openapi![my_controller])
        .mount("/swagger", make_swagger_ui(&get_docs()))
        .launch();
}

依赖项

~16–50MB
~813K SLoC