Настройка API Gateway (Tyk) для веб-приложения

Наша компания занимается разработкой, поддержкой и обслуживанием сайтов любой сложности. От простых одностраничных сайтов до масштабных кластерных систем построенных на микро сервисах. Опыт разработчиков подтвержден сертификатами от вендоров.
Разработка и обслуживание любых видов сайтов:
Информационные сайты или веб-приложения
Сайты визитки, landing page, корпоративные сайты, онлайн каталоги, квиз, промо-сайты, блоги, новостные ресурсы, информационные порталы, форумы, агрегаторы
Сайты или веб-приложения электронной коммерции
Интернет-магазины, B2B-порталы, маркетплейсы, онлайн-обменники, кэшбэк-сайты, биржи, дропшиппинг-платформы, парсеры товаров
Веб-приложения для управления бизнес-процессами
CRM-системы, ERP-системы, корпоративные порталы, системы управления производством, парсеры информации
Сайты или веб-приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, конструкторы сайтов, порталы предоставления электронных услуг, видеохостинги, тематические порталы

Это лишь некоторые из технических типов сайтов, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента

Предлагаемые услуги
Показано 1 из 1 услугВсе 2065 услуг
Настройка API Gateway (Tyk) для веб-приложения
Сложная
~3-5 рабочих дней
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1214
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1161
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    852
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1041
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    823
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    815

Настройка API Gateway (Tyk) для веб-приложения

Tyk — open-source API Gateway на Go, альтернатива Kong. Включает Dashboard, 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 Definition файл

Каждый 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 definition
"custom_middleware": {
  "pre": [
    {
      "name": "addTenantId",
      "path": "middleware/add-tenant-id.js",
      "require_session": true
    }
  ]
}

GraphQL proxying

// 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 дней.