Skip to content

Rust ​

Крейт: wb-api-client на crates.io — исходники живут в отдельном репозитории, подключённом к основному как submodule clients/rust.

  • Rust: edition 2021 (пайплайн публикует с toolchain 1.98)
  • HTTP: reqwest с rustls-tls — системный OpenSSL не нужен
  • Обёртка секретов: домашний SecretString в каждом модуле

Установка ​

bash
cargo add wb-api-client

Зафиксировать конкретную версию по тегу git-зависимостью:

toml
wb-api-client = { git = "https://github.com/ValeryVerkhoturov/wb-api-client-rust", tag = "v1.20261022.0" }

Почему крейт живёт в отдельном репозитории ​

crates.io связывает крейт с выделенным репозиторием, а git-зависимости резолвятся от корня репозитория — поэтому клиент лежит в wb-api-client-rust с Cargo.toml в корне. Релизные теги (vX.Y.Z) пушатся в этот репозиторий тем же пайплайном, что и в основной.

Форма импортов ​

Один крейт, 13 модулей-категорий под wb_api_client::<snake_slug>, у каждого — под-модули apis и models:

rust
use wb_api_client::items::apis::{configuration::Configuration, items_api};

Методы эндпоинтов — свободные async fn внутри <категория>_api и принимают &Configuration, поэтому нужен async-рантайм (в примерах — tokio).

Под-модули ​

general, items, orders_fbs, orders_dbw, dbs, in_store_pickup, orders_fbw, promotion, communications, rates, analytics, reports, finances.

Функции и модели на модуль перечислены в per-release README: wb-api-client-rust/README.md.

Авторизация ​

rust
use wb_api_client::items::apis::{configuration::Configuration, items_api};

#[tokio::main]
async fn main() {
    let mut cfg = Configuration::new();
    cfg.set_access_token("<ваш JWT WB>");   // оборачивается в SecretString

    let result = items_api::some_endpoint(&cfg).await;
    println!("{:#?}", result);
}

set_access_token — единственный путь: токен хранится в домашнем SecretString, у которого и Debug, и Display печатают <REDACTED> — случайно слить его в лог через println!("{cfg:?}") не получится. Получить сырое значение обратно — только явно:

rust
use wb_api_client::items::apis::configuration::SecretString;

let s = SecretString::new("<ваш JWT WB>");
println!("{}", s.expose_secret());

Свой HTTP-клиент ​

Подставьте свой reqwest::Client — для прокси, кастомных таймаутов или заголовков по умолчанию:

rust
let mut cfg = Configuration::new();
cfg.client = reqwest::Client::builder()
    .timeout(std::time::Duration::from_secs(60))
    .build()
    .unwrap();

Тестирование ​

Переопределите базовый URL при создании Configuration:

rust
let mut cfg = Configuration::new();
cfg.base_path = "http://localhost:8080".to_owned();

См. также ​

wb-api-client mascot

Распространяется под лицензией Apache 2.0.