Rust
Крейт: wb-api-client на crates.io — исходники живут в отдельном репозитории, подключённом к основному как submodule clients/rust.
- Rust: edition 2021 (пайплайн публикует с toolchain 1.98)
- HTTP:
reqwestсrustls-tls— системный OpenSSL не нужен - Обёртка секретов: домашний
SecretStringв каждом модуле
Установка
cargo add wb-api-clientЗафиксировать конкретную версию по тегу git-зависимостью:
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:
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.
Авторизация
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:?}") не получится. Получить сырое значение обратно — только явно:
use wb_api_client::items::apis::configuration::SecretString;
let s = SecretString::new("<ваш JWT WB>");
println!("{}", s.expose_secret());Свой HTTP-клиент
Подставьте свой reqwest::Client — для прокси, кастомных таймаутов или заголовков по умолчанию:
let mut cfg = Configuration::new();
cfg.client = reqwest::Client::builder()
.timeout(std::time::Duration::from_secs(60))
.build()
.unwrap();Тестирование
Переопределите базовый URL при создании Configuration:
let mut cfg = Configuration::new();
cfg.base_path = "http://localhost:8080".to_owned();См. также
