Java
Координаты: io.github.valeryverkhoturov:wb-api-client на Maven Central.
- Java: 8+ (компилируется с
-source 1.8 -target 1.8) - HTTP: OkHttp 4
- JSON: Gson + gson-fire
- Обёртка секретов:
SecretStringв каждом под-пакете
Установка
<dependency>
<groupId>io.github.valeryverkhoturov</groupId>
<artifactId>wb-api-client</artifactId>
<version>LATEST</version>
</dependency>dependencies {
implementation("io.github.valeryverkhoturov:wb-api-client:LATEST")
}dependencies {
implementation 'io.github.valeryverkhoturov:wb-api-client:LATEST'
}libraryDependencies += "io.github.valeryverkhoturov" % "wb-api-client" % "LATEST"Замените LATEST на актуальную версию 1.YYYYMMDD.N со страницы релизов.
Раскладка пакетов
Базовый пакет: io.github.valeryverkhoturov.wbapi. Каждая категория WB — свой под-пакет со своим ApiClient, моделями и классами api.
import io.github.valeryverkhoturov.wbapi.items.ApiClient;
import io.github.valeryverkhoturov.wbapi.items.api.ItemsApi;Под-пакеты
general, items, orders_fbs, orders_dbw, dbs, in_store_pickup, orders_fbw, promotion, communications, rates, analytics, reports, finances.
Полный список API-классов на модуль: clients/java/README.md.
Авторизация
import io.github.valeryverkhoturov.wbapi.items.ApiClient;
import io.github.valeryverkhoturov.wbapi.items.api.ItemsApi;
ApiClient client = new ApiClient();
client.setAccessToken("<ваш JWT WB>");
ItemsApi api = new ItemsApi(client);setAccessToken принимает обычную String и оборачивает её в SecretString внутри клиента — конструировать обёртку руками не нужно, а в логах и дампах токен остаётся замаскированным.
Один SecretString на под-пакет — почему
Обёртка генерируется в каждый под-пакет, а не расшарена на всю библиотеку, потому что openapi-generator создаёт полностью изолированные SDK на каждую спецификацию — общего «core»-модуля нет. Объединение потребовало бы дополнительного прохода генерации с межмодульными зависимостями. Цена — один класс на под-пакет; плюс в том, что клиент остаётся чистым выхлопом openapi-generator с минимальными точечными правками.
На практике это незаметно: setAccessToken оборачивает строку в SecretString своего под-пакета сам, поэтому импортировать и конструировать обёртку не требуется.
Свой OkHttp-клиент
Подставьте свой экземпляр для прокси, интерсепторов или кастомных таймаутов:
import okhttp3.OkHttpClient;
import java.time.Duration;
OkHttpClient http = new OkHttpClient.Builder()
.connectTimeout(Duration.ofSeconds(5))
.readTimeout(Duration.ofSeconds(120))
.build();
ApiClient client = new ApiClient(http);
client.setAccessToken(TOKEN);Java 8 vs новее
Генератор выдаёт Java-8-совместимый код с threetenbp для дат и времени. На Java 11+ это по-прежнему работает — «современную» зависимость дополнительно ставить не нужно. Если хочется работать с java.time напрямую, модели предоставляют доступ к исходным строковым значениям через методы set*ToString / get*ToString, где это применимо.
Тестирование
Переопределите base path:
ApiClient client = new ApiClient();
client.setBasePath("http://localhost:8080");См. также
