Go
Модуль: github.com/ValeryVerkhoturov/wb-api-client-go — резолвится из git-тегов отдельного репозитория.
- Go: 1.22+
- HTTP:
net/http(стандартная библиотека) - Обёртка секретов:
github.com/negrel/secrecy
Установка
go get github.com/ValeryVerkhoturov/wb-api-client-go@latestЗафиксировать конкретную версию по тегу:
go get github.com/ValeryVerkhoturov/wb-api-client-go@v1.20260926.0proxy.golang.org берёт код прямо из пушнутого тега — отдельный реестр не нужен.
Почему модуль живёт в отдельном репозитории
В Go принято «один модуль на репозиторий», поэтому клиент лежит в wb-api-client-go с go.mod в корне. Релизные теги (vX.Y.Z) пушатся в этот репозиторий тем же пайплайном, что и в основной — Go подхватывает нужный тег.
Поскольку MAJOR = 1 зафиксирован (см. версионирование), суффикса /v2 не будет ни сейчас, ни в будущем.
Форма импортов
По одному Go-пакету на категорию WB API, у каждого свои Configuration, APIClient и типы *API.
import wbitems "github.com/ValeryVerkhoturov/wb-api-client-go/items"Давайте каждому под-модулю алиас (wbitems, wbfbs, wbanalytics, …) — иначе имена конфликтуют: во всех модулях экспортируются одни и те же идентификаторы.
Под-модули
general, items, orders_fbs, orders_dbw, dbs, in_store_pickup, orders_fbw, promotion, communications, rates, analytics, reports, finances.
Структуры *API и методы эндпоинтов на модуль перечислены в per-release README: wb-api-client-go/README.md.
Авторизация
package main
import (
"context"
"fmt"
wbitems "github.com/ValeryVerkhoturov/wb-api-client-go/items"
)
func main() {
cfg := wbitems.NewConfiguration()
cfg.SetAccessToken("<ваш JWT WB>") // оборачивается в *secrecy.SecretString
client := wbitems.NewAPIClient(cfg)
v, _, err := client.DefaultAPI.SomeEndpoint(context.Background()).Execute()
if err != nil {
panic(err)
}
fmt.Printf("%+v\n", v)
}SetAccessToken — единственный путь: стандартный для openapi-generator канал ContextAccessToken через context.Value вырезан, случайно обойти обёртку не получится.
Получить сырое значение обратно:
cfg.AccessToken.ExposeSecret()Контексты
Каждый вызов принимает context.Context. Прокидывайте дедлайн и отмену из своего приложения — клиент их уважает:
ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
defer cancel()
v, _, err := client.DefaultAPI.SomeEndpoint(ctx).Execute()Свой HTTP-клиент
Подставьте *http.Client для прокси, кастомных таймаутов или транспорт-обёртки:
cfg := wbitems.NewConfiguration()
cfg.HTTPClient = &http.Client{
Timeout: 60 * time.Second,
Transport: &http.Transport{
Proxy: http.ProxyFromEnvironment,
},
}Тестирование
Переопределите хост при создании Configuration:
cfg := wbitems.NewConfiguration()
cfg.Host = "localhost:8080"
cfg.Scheme = "http"См. также
