Обзор

Два способа работать с Pachca API типизированно:

  • Готовые SDK — установите пакет и пишите код с автодополнением
  • Генератор — сгенерируйте клиент прямо в своём проекте

Оба варианта автоматически генерируются из одной OpenAPI-спецификации: типизированные методы, retry, пагинация, обработка ошибок.

Готовые SDK

Автоматически обновляются при каждом обновлении спецификации. Исходный код на GitHub.

Генератор

Генерирует типы и клиент из OpenAPI-спецификации прямо в вашем проекте. Сгенерированный код можно закоммитить в репозиторий и добавить генерацию в CI как проверку совместимости с актуальным API. Исходный код на GitHub.

# Генерация из Pachca API (спецификация загружается автоматически)npx @pachca/generator --output ./generated --lang typescript # Несколько языковnpx @pachca/generator --output ./generated --lang typescript,python,go,kotlin,swift,csharp # Из локального файла или произвольного URLnpx @pachca/generator --spec openapi.yaml --output ./generated --lang typescriptnpx @pachca/generator --spec https://example.com/openapi.yaml --output ./generated --lang go
ПараметрОписание
--spec <path|url>Путь или URL к OpenAPI 3.0 YAML (по умолчанию: https://dev.pachca.com/openapi.yaml)
--output <dir>Директория для сгенерированного кода
--lang <langs>Языки через запятую: typescript, python, go, kotlin, swift, csharp
--examplesГенерировать examples.json с примерами вызовов

Возможности

ВозможностьОписание
16 сервисовТипизированные методы для каждого API-эндпоинта
АвтопагинацияМетоды *All() для автоматического обхода всех страниц
Повторные запросыАвтоматический retry при 429 и 5xx с экспоненциальным backoff
Обработка ошибокТипизированные ApiError и OAuthError
СериализацияАвтоматическая конвертация между форматами (snake_case ↔ camelCase)
АвторизацияBearer-токен передаётся один раз при создании клиента

Пример

Получение профиля
import { PachcaClient } from "@pachca/sdk" const client = new PachcaClient("YOUR_TOKEN") const response = client.profile.getProfile()// → User({ id: number, firstName: string, lastName: string | null, nickname: string, email: string | null, phoneNumber: string | null, department: string | null, title: string | null, role: UserRole, suspended: boolean, inviteStatus: InviteStatus, inviterId: number | null, listTags: string[], customProperties: CustomProperty({ id: number, name: string, dataType: CustomPropertyDataType, value: string })[], userStatus: UserStatus({ emoji: string, title: string, expiresAt: string | null, isAway: boolean, awayMessage: UserStatusAwayMessage({ text: string }) | null }) | null, bot: boolean, sso: boolean, createdAt: string, lastActivityAt: string | null, timeZone: string | null, imageUrl: string | null })

Сравнение языков

TypeScriptPythonGoKotlinSwiftC#
Пакет@pachca/sdkpachca-sdkgo get ...com.pachca:pachca-sdkPachcaSDKPachca.Sdk
МенеджерnpmPyPIGo modulesJitPack (Gradle)SPMNuGet
Asyncawaitawait (asyncio)синхронныйsuspend (coroutines)try awaitawait
HTTPfetchhttpxnet/httpKtorURLSessionHttpClient
NamingcamelCasesnake_casePascalCasecamelCasecamelCasePascalCase
Cleanupawait client.close()client.close()client.Dispose()
ТребованияNode.js 18+Python 3.10+Go 1.24+Kotlin 2.2+, Java 11+Swift 5.9+, macOS 13+, iOS 16+.NET 8+