Налаштування API Gateway (Tyk) для веб-застосунку

Наша компанія займається розробкою, підтримкою та обслуговуванням сайтів будь-якої складності. Від простих односторінкових сайтів до масштабних кластерних систем, побудованих на мікро сервісах. Досвід розробників підтверджено сертифікатами від вендорів.

Розробка та обслуговування будь-яких видів сайтів:

Інформаційні сайти або веб-програми
Сайти візитки, landing page, корпоративні сайти, онлайн каталоги, квіз, промо-сайти, блоги, ресурси новин, інформаційні портали, форуми, агрегатори
Сайти або веб-програми електронної комерції
Інтернет-магазини, B2B-портали, маркетплейси, онлайн-обмінники, кешбек-сайти, біржі, дропшиппінг-платформи, парсери товарів
Веб-програми для управління бізнес-процесами
CRM-системи, ERP-системи, корпоративні портали, системи управління виробництвом, парсери інформації
Сайти або веб-програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, конструктори сайтів, портали надання електронних послуг, відеохостинги, тематичні портали

Це лише деякі з технічних типів сайтів, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Пропоновані послуги
Показано 1 з 1 послугУсі 2065 послуг
Налаштування API Gateway (Tyk) для веб-застосунку
Складна
~3-5 робочих днів
Часті питання

Наші компетенції:

Етапи розробки
Останні роботи
  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1171
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    874
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1094
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    831
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851

Налаштування API Gateway (Tyk) для веб-додатку

Tyk — open-source API Gateway написаний на Go, альтернатива Kong. Включає Dashboard, Developer Portal та вбудовану підтримку GraphQL та gRPC. Community Edition повністю функціональна без ліцензійних обмежень щодо кількості API.

Компоненти Tyk

  • Tyk Gateway — безпосередньо сам проксі-сервер
  • Tyk Dashboard — web UI для управління API
  • Tyk Pump — агрегація аналітики в Redis/Elasticsearch/MongoDB
  • Tyk Developer Portal — портал для зовнішніх розробників

Docker Compose розгортання

version: '3.8'
services:
  tyk-redis:
    image: redis:7-alpine
    command: redis-server --maxmemory 256mb

  tyk-gateway:
    image: tykio/tyk-gateway:v5.3
    volumes:
      - ./tyk.conf:/opt/tyk-gateway/tyk.conf
      - ./apps:/opt/tyk-gateway/apps
      - ./middleware:/opt/tyk-gateway/middleware
    ports:
      - "8080:8080"
    environment:
      TYK_GW_SECRET: supersecret
    depends_on: [tyk-redis]

  tyk-pump:
    image: tykio/tyk-pump-docker-pub:latest
    volumes:
      - ./pump.conf:/opt/tyk-pump/pump.conf
    depends_on: [tyk-redis]
// tyk.conf
{
  "listen_port": 8080,
  "secret": "supersecret",
  "template_path": "/opt/tyk-gateway/templates",
  "use_db_app_configs": false,
  "app_path": "/opt/tyk-gateway/apps/",
  "storage": {
    "type": "redis",
    "host": "tyk-redis",
    "port": 6379
  },
  "enable_analytics": true,
  "analytics_config": {
    "type": "rpc"
  },
  "health_check": {
    "enable_health_checks": true,
    "health_check_value_timeouts": 60
  },
  "optimisations_use_async_session_write": true
}

Файл визначення API

Кожен API описується JSON-файлом у директорії apps/:

// apps/users-api.json
{
  "name": "Users API",
  "api_id": "users-api",
  "slug": "users-api",
  "org_id": "default",
  "use_keyless": false,
  "auth": {
    "auth_header_name": "Authorization",
    "use_param": false
  },
  "definition": {
    "location": "header",
    "key": "x-api-version"
  },
  "version_data": {
    "not_versioned": true,
    "versions": {
      "Default": {
        "name": "Default",
        "use_extended_paths": true,
        "extended_paths": {
          "rate_limit": [
            {
              "path": "/",
              "method": "GET",
              "rate": 100,
              "per": 60
            }
          ],
          "transform": [
            {
              "path": "/users",
              "method": "POST",
              "template_data": {
                "template_mode": "blob",
                "blob": "eyJlbWFpbCI6ICJ7e3JlcXVlc3RfZGF0YS5lbWFpbH19In0="
              }
            }
          ]
        }
      }
    }
  },
  "proxy": {
    "listen_path": "/api/v1/users/",
    "target_url": "http://users-service:3000",
    "strip_listen_path": true
  },
  "rate_limit_and_quota_middleware": true
}

Управління ключами через API

# Створити API-ключ
curl -X POST http://localhost:8080/tyk/keys/create \
  -H "x-tyk-authorization: supersecret" \
  -H "Content-Type: application/json" \
  -d '{
    "alias": "mobile-app",
    "rate": 1000,
    "per": 60,
    "quota_max": 50000,
    "quota_renewal_rate": 86400,
    "access_rights": {
      "users-api": {
        "api_name": "Users API",
        "api_id": "users-api",
        "versions": ["Default"]
      }
    }
  }'

# Відповідь містить key_id — поділитися з розробником

Middleware на JavaScript

Tyk підтримує кастомний middleware на JavaScript (V8 движок):

// middleware/add-tenant-id.js
var addTenantId = new TykJS.TykMiddleware.NewMiddleware({})

addTenantId.NewProcessRequest(function(request, session, spec) {
  var tenantId = session.meta_data['tenant_id']
  request.SetHeaders['X-Tenant-ID'] = tenantId
  return TykJS.TykMiddleware.ReturnData(request, {})
})
// У визначенні API
"custom_middleware": {
  "pre": [
    {
      "name": "addTenantId",
      "path": "middleware/add-tenant-id.js",
      "require_session": true
    }
  ]
}

Проксіювання GraphQL

// apps/graphql-api.json
{
  "name": "GraphQL API",
  "graphql": {
    "enabled": true,
    "execution_mode": "proxyOnly",
    "schema": "type Query { user(id: ID!): User }\ntype User { id: ID name: String }",
    "version": "2",
    "proxy": {
      "auth_headers": {
        "Authorization": "Bearer internal-token"
      }
    },
    "type_field_configurations": [],
    "playground": {
      "enabled": true,
      "path": "/playground"
    }
  },
  "proxy": {
    "target_url": "http://graphql-service:4000/graphql"
  }
}

Аналітика через Tyk Pump

// pump.conf
{
  "pumps": {
    "elasticsearch": {
      "type": "elasticsearch",
      "meta": {
        "index_name": "tyk_analytics",
        "elasticsearch_url": "http://elasticsearch:9200"
      }
    },
    "prometheus": {
      "type": "prometheus",
      "meta": {
        "listen_address": "0.0.0.0:9090"
      }
    }
  },
  "uptime_pump_config": {
    "collection_name": "tyk_uptime_analytics",
    "database_url": "mongodb://mongo:27017/tyk_analytics"
  },
  "analytics_storage_type": "redis",
  "analytics_storage_config": {
    "host": "tyk-redis"
  }
}

Різниці від Kong

Характеристика Kong Tyk
Мова Lua/Go Go
Middleware Lua plugins JS/Go plugins
GraphQL Плагін Вбудовано
Dashboard Платний (Kong Manager EE) Безплатний
Конфігурація API/DB Файли/API/DB
Developer Portal Немає в OSS Є

Графік

Встановлення Tyk Gateway з Dashboard та базовою настройкою API — 2 робочих дня. Повна конфігурація з middleware, аналітикою та Developer Portal — 4–5 днів.