Get Appointment

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅: соврСмСнноС API для Ρ†ΠΈΡ„Ρ€ΠΎΠ²Ρ‹Ρ… ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΎΠ²

Π’ эпоху Ρ†ΠΈΡ„Ρ€ΠΎΠ²ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ развития ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚-Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ эффСктивная организация ΠΎΠ±ΠΌΠ΅Π½Π° Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ клиСнтскими прилоТСниями ΠΈ сСрвСром становится стратСгичСским прСимущСством. REST ΠΈ GraphQL β€” Π΄Π²Π° Π²Π΅Π΄ΡƒΡ‰ΠΈΡ… ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° ΠΊ созданию API, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅, Π³ΠΈΠ±ΠΊΠΈΠ΅ ΠΈ бСзопасныС сСрвисы. Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ рассмотрим соврСмСнныС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ создания API с ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° throttling β€” ограничСния частоты запросов для Π·Π°Ρ‰ΠΈΡ‚Ρ‹ ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ вашСго сСрвиса.

REST ΠΈ GraphQL: ΠΊΡ€Π°Ρ‚ΠΊΠΈΠΉ ΠΎΠ±Π·ΠΎΡ€ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ

REST (Representational State Transfer) β€” Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π½Ρ‹ΠΉ ΡΡ‚ΠΈΠ»ΡŒ, основанный Π½Π° стандартах HTTP, ΡˆΠΈΡ€ΠΎΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ для ΠΎΠ±ΠΌΠ΅Π½Π° Π΄Π°Π½Π½Ρ‹ΠΌΠΈ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ JSON ΠΈΠ»ΠΈ XML. REST API просты Π² Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, Ρ…ΠΎΡ€ΠΎΡˆΠΎ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎΠΌ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΎΠ² ΠΈ языков программирования.

GraphQL β€” язык запросов ΠΎΡ‚ Facebook, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ структуру ΠΈ объСм Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…. GraphQL API обСспСчиваСт Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ Π³ΠΈΠ±ΠΊΠΎΡΡ‚ΡŒ, сниТаСт ΠΈΠ·Π±Ρ‹Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠ΅ Ρ„Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄Π°.

Π‘Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ API: соврСмСнныС ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Ρ‹ ΠΊ Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ

ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Π΅ API ΠΏΠΎΠ΄Π²Π΅Ρ€ΠΆΠ΅Π½Ρ‹ рискам: нСсанкционированный доступ, ΡƒΡ‚Π΅Ρ‡ΠΊΠ° Π΄Π°Π½Π½Ρ‹Ρ…, злоупотрСблСния рСсурсами. ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠΉ элСмСнт бСзопасности β€” авторизация, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΠΏΡ€Π°Π² ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π½Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹Ρ… дСйствий ΠΈΠ»ΠΈ доступ ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ.

  • OAuth 2.0 β€” ΠΈΠ½Π΄ΡƒΡΡ‚Ρ€ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ стандарт, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π΅Π»Π΅Π³ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΡŽ Ρ‡Π΅Ρ€Π΅Π· сторонниС сСрвисы (Google, Facebook ΠΈ Π΄Ρ€.).
  • JWT (JSON Web Token) β€” ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½Ρ‹ΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ², бСзопасно ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹Ρ… Π² HTTP-Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°Ρ…. ΠŸΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ‚ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ stateless-Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΡŽ: сСрвСр Π½Π΅ Ρ…Ρ€Π°Π½ΠΈΡ‚ сСссии, Π° провСряСт подпись ΠΈ содСрТимоС Ρ‚ΠΎΠΊΠ΅Π½Π°.
  • API-ΠΊΠ»ΡŽΡ‡ΠΈ β€” ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹, Π²Ρ‹Π΄Π°Π²Π°Π΅ΠΌΡ‹Π΅ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ. ΠŸΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ для сСрвисного взаимодСйствия ΠΌΠ΅ΠΆΠ΄Ρƒ систСмами.
  • Role-based access control (RBAC) β€” Ρ€Π°Π·Π³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ ΠΏΡ€Π°Π² доступа ΠΏΠΎ ролям, Ρ‡Ρ‚ΠΎ ΡƒΠ΄ΠΎΠ±Π½ΠΎ для ΠΊΠΎΡ€ΠΏΠΎΡ€Π°Ρ‚ΠΈΠ²Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΈ слоТных бизнСс-Π»ΠΎΠ³ΠΈΠΊ.

Для REST ΠΈ GraphQL поддСрТиваСтся Сдиная инфраструктура Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ, Ρ‡Ρ‚ΠΎ позволяСт Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒΡŽ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ middleware ΠΈΠ»ΠΈ шлюзов API Gateway.

Throttling: Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΈ Π°Ρ‚Π°ΠΊ

Throttling (Π»ΠΈΠΌΠΈΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ частоты запросов) β€” ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Π°Ρ ΠΌΠ΅Ρ€Π° Π·Π°Ρ‰ΠΈΡ‚Ρ‹ API ΠΎΡ‚ DDoS-Π°Ρ‚Π°ΠΊ, скриптов массового сбора Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ просто Π½Π΅Π±Ρ€Π΅ΠΆΠ½Ρ‹Ρ… ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΉ. Π‘ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π³ΠΈΠ±ΠΊΠΎ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ Π»ΠΈΠΌΠΈΡ‚Π°ΠΌΠΈ для Ρ€Π°Π·Π½Ρ‹Ρ… Π³Ρ€ΡƒΠΏΠΏ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ ΠΈ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ злоупотрСблСния.

  • Rate limiting β€” ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ числа запросов Π·Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹ΠΉ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, 1000 запросов Π² час Π½Π° Ρ‚ΠΎΠΊΠ΅Π½ ΠΈΠ»ΠΈ IP-адрСс).
  • Leaky Bucket ΠΈ Token Bucket β€” Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹, ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΠ΅ Ρ€Π°Π²Π½ΠΎΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΡŒ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΈ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ Ρ€Π΅Π·ΠΊΠΈΡ… всплСсков ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΉ.
  • Quotas β€” мСсячныС ΠΈΠ»ΠΈ суточныС Π»ΠΈΠΌΠΈΡ‚Ρ‹ Π½Π° использованиС API, часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для ΠΏΠ»Π°Ρ‚Π½Ρ‹Ρ… Ρ‚Π°Ρ€ΠΈΡ„ΠΎΠ².

Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ throttling Π² REST ΠΈ GraphQL API рСализуСтся Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ API Gateway (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Kong, NGINX, AWS API Gateway) Π»ΠΈΠ±ΠΎ Ρ‡Π΅Ρ€Π΅Π· middleware популярных Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΎΠ² (Express.js, Django, Laravel ΠΈ Π΄Ρ€.).

ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠΈΠ΅ аспСкты внСдрСния Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ throttling

Для REST ΠΈ GraphQL API рСкомСндуСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π³ΠΎΡ‚ΠΎΠ²Ρ‹Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ ΠΈ middleware:

  • Express.js: express-rate-limit, passport.js для Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ.
  • Django REST Framework: встроСнныС ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΈ лимитирования.
  • Apollo Server: интСграция с JWT ΠΈ custom middleware для throttling.

Π’ ΠΊΡ€ΡƒΠΏΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ… ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ: ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ сСрвис Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ (Identity Provider), API Gateway с ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ ΠΏΠΎΠ»ΠΈΡ‚ΠΈΠΊΠΈ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ, ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ ΠΈ Π»ΠΎΠ³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎΠ΄ΠΎΠ·Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ активности.

Бонус: соврСмСнныС Ρ‚Ρ€Π΅Π½Π΄Ρ‹ ΠΈ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ

  • Zero Trust: ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΡ€ΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΠΈ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, постоянная валидация запросов.
  • OAuth 2.1: упрощСнная ΠΈ Π±ΠΎΠ»Π΅Π΅ бСзопасная вСрсия ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ.
  • РСализация CORS ΠΈ HTTPS: ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ΅Ρ€Ρ‹ для Π·Π°Ρ‰ΠΈΡ‚Ρ‹ ΠΎΡ‚ ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚Π° ΠΈ мСТсайтовых Π°Ρ‚Π°ΠΊ.

Π‘ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ API Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, Π½ΠΎ ΠΈ высокого уровня бСзопасности, контроля доступа ΠΈ Π·Π°Ρ‰ΠΈΡ‚Ρ‹ ΠΎΡ‚ Π·Π»ΠΎΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠΉ. ИспользованиС Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ throttling β€” стандарт для Π»ΡŽΠ±Ρ‹Ρ… ΠΏΡ€ΠΎΡ„Π΅ΡΡΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ, Π±ΡƒΠ΄ΡŒ Ρ‚ΠΎ мобильноС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, SaaS-сСрвис ΠΈΠ»ΠΈ корпоративная информационная систСма.

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅: Π΄ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ API профСссионалам

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ REST ΠΈ GraphQL API с Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ ΠΈ throttling β€” Π·Π°Π΄Π°Ρ‡Π°, Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰Π°Ρ экспСртизы ΠΈ комплСксного ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π°. ΠœΡ‹ ΠΎΠ±Π»Π°Π΄Π°Π΅ΠΌ ΠΎΠΏΡ‹Ρ‚ΠΎΠΌ внСдрСния соврСмСнных Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ ΠΏΠΎΠ΄ Π»ΡŽΠ±Ρ‹Π΅ бизнСс-процСссы, Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ, ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΠΎΡΡ‚ΡŒ ΠΈ удобство ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ΡΡŒ ΠΊ Π½Π°ΠΌ β€” ΠΌΡ‹ ΠΏΠΎΠΌΠΎΠΆΠ΅ΠΌ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ваш ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π½Π° Π²Ρ‹ΡΡˆΠ΅ΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅! ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΎ нашСй услугС

Avatar
Raman Sapezhka

CEO Plantago/CTO