Slide 1

Slide 1 text

OpenAPIからのRustクライアントコード生成 2024-07-24 Rust、何もわからない…#13 @matsu7874 #Rust何もわからない

Slide 2

Slide 2 text

matsu7874 株式会社estieでソフトウェアエンジニアをしています。 RustでWebアプリケーションを開発しています。 自己紹介 © 2024 estie, Inc. 1

Slide 3

Slide 3 text

OpenAPI Generatorを使おう これで必要なブロックが揃います。 npm install @openapitools/openapi-generator-cli -g openapi-generator-cli generate -i api.yaml -g rust -o generated-client 結論 © 2024 estie, Inc. 2

Slide 4

Slide 4 text

1. 今回は使う側の話 2. OpenAPI周りのツール群 3. OpenAPI Generator 目次 © 2024 estie, Inc. 3

Slide 5

Slide 5 text

1. 今回は使う側の話

Slide 6

Slide 6 text

schema first VS code first の話ではない Rustでバックエンドを書く部分では code first なcrateを使っている async_graphql paperclip 1. 今回は使う側の話 © 2024 estie, Inc. 5

Slide 7

Slide 7 text

他の言語で開発されたAPIをRustから使いたい 基盤チームが開発してくれているAPIをプロダクトから使いたい OpenAPI 3.1.0形式でAPI仕様を共有している 今後も基盤の開発が続きそうで、API仕様が変わるかもしれない 1. 今回は使う側の話 © 2024 estie, Inc. 6

Slide 8

Slide 8 text

2. OpenAPI周りのツール群

Slide 9

Slide 9 text

今回の用途に適したものがない utoipa Rust->OpenAPIの変換ツール paperclip OpenAPI 3.1.0形式に対応していない Progenitor OpenAPI 3.1.0形式に対応していない Swagger Codegen jarファイルが必要?未検証 2. OpenAPI周りのツール群 © 2024 estie, Inc. 8

Slide 10

Slide 10 text

3. OpenAPI Generator

Slide 11

Slide 11 text

Webエンジニアにとってインストールが簡単 npm install @openapitools/openapi-generator-cli -g 3. OpenAPI Generator © 2024 estie, Inc. 10

Slide 12

Slide 12 text

コード生成も簡単 openapi-generator-cli generate -i api.yaml -g rust -o generated-client 3. OpenAPI Generator © 2024 estie, Inc. 11

Slide 13

Slide 13 text

生成されたファイル群 generated-client ├── Cargo.toml ├── README.md ├── docs │ └── モデルに対応するドキュメント.md ├── git_push.sh └── src ├── apis │ ├── configuration.rs │ ├── default_api.rs │ └── mod.rs ├── lib.rs └── models ├── mod.rs └── モデルごとの.rs 3. OpenAPI Generator © 2024 estie, Inc. 12

Slide 14

Slide 14 text

生成されたコードの使い方 use chat::{apis, models}; #[tokio::main] async fn main() { let mut config = apis::configuration::Configuration::new(); let request = models::Chat::new(vec![ models::ChatRequestMessagesInner::ChatMessageParam(Box::new( "接続成功してくれ!!!!!!!".to_string(), )), ]); let result = apis::default_api::chat_api_post( &config, request, ).await; } 3. OpenAPI Generator © 2024 estie, Inc. 13

Slide 15

Slide 15 text

OpenAPI Generatorの弱点 Rust向けに対応していない項目もある anyOf 未対応 oneOf は対応済み https://openapi-generator.tech/docs/generators/rust/ 3. OpenAPI Generator © 2024 estie, Inc. 14

Slide 16

Slide 16 text

まとめ

Slide 17

Slide 17 text

OpenAPI Generatorを使おう RustでOpenAPIを使う際にはOpenAPI Generatorを使うのが簡単 一部対応していない項目はあるが 生成されたコードを使ってAPI呼び出し部分を実装しよう まとめ © 2024 estie, Inc. 16