Gymterview
middle

Что такое Connect и чем он отличается от Forge?

Atlassian Connect — фреймворк для разработки Cloud-приложений, где приложение хостится на собственном сервере разработчика и интегрируется с Jira через iframe и REST API.

Архитектура Connect

Пример
┌──────────────────┐              ┌──────────────────┐
│   Jira Cloud     │   iframe     │  Connect App     │
│                  │ ←──────────→ │  (ваш сервер)    │
│  ┌────────────┐  │              │                  │
│  │ iframe     │  │   REST API   │  Spring Boot /   │
│  │ (app UI)   │  │ ←──────────→ │  Node.js / ...   │
│  └────────────┘  │              │                  │
│  JWT Auth        │   Webhooks   │  PostgreSQL /     │
└──────────────────┘ ────────────→│  MongoDB / ...    │
                                  └──────────────────┘

Сравнение Forge vs Connect

Аспект Forge Connect
Хостинг Atlassian (serverless) Свой сервер
Язык TypeScript/JavaScript Любой
БД Forge Storage (KV, 32KB) Любая (PostgreSQL, etc.)
UI UI Kit / Custom UI (React) iframe (любой фреймворк)
Аутентификация Автоматическая JWT (ручная реализация)
Timeout 25 секунд Нет (свой сервер)
Сложность деплоя Минимальная (forge deploy) Высокая (свой CI/CD)
Контроль Ограниченный Полный
Стоимость инфраструктуры Бесплатно (до лимитов) Свои серверы

Lifecycle callbacks (Spring Boot)

Пример
@RestController
@RequestMapping("/api/lifecycle")
public class LifecycleController {

    private final TenantService tenantService;

    @PostMapping("/installed")
    public ResponseEntity<Void> installed(@RequestBody InstallPayload payload) {
        tenantService.register(
                payload.getClientKey(),
                payload.getSharedSecret(),
                payload.getBaseUrl(),
                payload.getProductType()
        );
        return ResponseEntity.ok().build();
    }

    @PostMapping("/uninstalled")
    public ResponseEntity<Void> uninstalled(@RequestBody UninstallPayload payload) {
        tenantService.unregister(payload.getClientKey());
        return ResponseEntity.ok().build();
    }
}

Частые ошибки

  • Не реализовать lifecycle callbacks — приложение не знает о новых/удалённых инстансах
  • Хранить shared secret в plain text — компрометация даёт полный доступ к Jira-инстансу
  • Не обрабатывать мультитенантность — данные одного клиента утекают другому
  • Не проверять JWT в каждом запросе — открытый API без аутентификации

Как используется в 2026

  • Connect остаётся востребованным для enterprise-приложений с собственной инфраструктурой
  • Atlassian не deprecated Connect, но рекомендует Forge для новых приложений
  • Популярный стек: Spring Boot + Connect + PostgreSQL + React (в iframe)
  • Миграция Connect -> Forge возможна, но трудоёмка из-за различий в архитектуре

На собеседовании: покажите понимание архитектурных различий. Connect — правильный выбор, когда нужен полный контроль над стеком, собственная БД, тяжёлые вычисления. Мультитенантность — ключевой вызов: Connect-приложение обслуживает множество Jira-инстансов. JWT shared secret критически важен — хранить в Vault/KMS.