Реалізація трансформації запитів/відповідей на API Gateway

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

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

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

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

Пропоновані послуги
Показано 1 з 1 послугУсі 2065 послуг
Реалізація трансформації запитів/відповідей на API Gateway
Середня
~2-3 робочих дні
Часті питання

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

Етапи розробки
Останні роботи
  • 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

Трансформація на рівні Gateway дозволяє адаптувати формат даних між клієнтом та сервісом без змін коду самих сервісів. Типові завдання: перейменування полів, фільтрація чутливих даних, додавання системних заголовків, версіонування без переписування API.

Трансформація в Kong (Request/Response Transformer)

# Трансформація запиту
curl -X POST http://localhost:8001/services/users-api/plugins \
  -d "name=request-transformer" \
  -d "config.add.headers[]=X-Service-Version:1.2.3" \
  -d "config.add.headers[]=X-Request-ID:$(uuidgen)" \
  -d "config.remove.headers[]=X-Real-IP" \
  -d "config.rename.headers[]=Authorization:X-Auth-Token" \
  -d "config.add.querystring[]=format:json"

# Трансформація відповіді
curl -X POST http://localhost:8001/services/users-api/plugins \
  -d "name=response-transformer" \
  -d "config.remove.headers[]=X-Internal-Server" \
  -d "config.remove.headers[]=X-Powered-By" \
  -d "config.remove.headers[]=Server" \
  -d "config.add.headers[]=Cache-Control:no-store" \
  -d "config.add.headers[]=X-Content-Type-Options:nosniff"

Трансформація тіла запиту (JSON):

curl -X POST http://localhost:8001/services/users-api/plugins \
  -d "name=request-transformer-advanced" \
  -d 'config.add.body[]=source:web' \
  -d 'config.remove.body[]=internal_debug_flag' \
  -d 'config.rename.body[]=user_id:userId'  # camelCase для старого сервісу

Трансформація в APISIX (proxy-rewrite + response-rewrite)

{
  "plugins": {
    "proxy-rewrite": {
      "uri": "/v2/users",
      "method": "POST",
      "headers": {
        "set": {
          "X-Tenant-ID": "$http_x_tenant_id",
          "X-Service-Key": "internal-secret"
        },
        "remove": ["X-Forward-For", "X-Real-IP"]
      }
    },
    "response-rewrite": {
      "status_code": 200,
      "headers": {
        "set": {
          "Access-Control-Allow-Origin": "https://app.company.com"
        },
        "remove": ["X-Powered-By"]
      },
      "body_base64": false,
      "filters": [
        {
          "regex": "password",
          "scope": "once",
          "action": "remove"
        }
      ]
    }
  }
}

Трансформація в AWS API Gateway (Velocity Templates)

## Маппінг вхідного запиту
#set($inputRoot = $input.path('$'))
{
  "userId": "$context.authorizer.user_id",
  "tenantId": "$context.authorizer.tenant_id",
  "data": {
    "email": "$inputRoot.email",
    "name": "$inputRoot.name"
  },
  "metadata": {
    "ip": "$context.identity.sourceIp",
    "userAgent": "$context.identity.userAgent",
    "requestId": "$context.requestId"
  }
}

Трансформація відповіді (прибрати вкладеність):

## Integration Response mapping template
#set($inputRoot = $input.path('$.data'))
{
  "id": "$inputRoot.id",
  "email": "$inputRoot.email",
  "name": "$inputRoot.name",
  "createdAt": "$inputRoot.created_at"
}

Фільтрація чутливих полів у відповіді

-- Kong плагін: видалення полів перед відправкою клієнту
local function filter_response(body_json)
  local sensitive = {"password_hash", "secret_key", "internal_id", "admin_notes"}
  for _, field in ipairs(sensitive) do
    body_json[field] = nil
  end
  return body_json
end

-- У плагіні header_filter/body_filter
local body = cjson.decode(ngx.arg[1])
ngx.arg[1] = cjson.encode(filter_response(body))

Версіонування через трансформацію

Старий клієнт (v1 API) → Gateway адаптує до формату v2 сервісу:

// KrakenD serverless middleware
var adaptV1toV2 = new TykJS.TykMiddleware.NewMiddleware({})

adaptV1toV2.NewProcessRequest(function(request, session) {
  var body = JSON.parse(request.Body)

  // Клієнт надсилає v1 формат: { "user_id": 123 }
  // Сервіс очікує v2 формат: { "userId": "123", "version": 2 }
  var transformed = {
    userId: String(body.user_id),
    version: 2
  }

  request.Body = JSON.stringify(transformed)
  return TykJS.TykMiddleware.ReturnData(request, {})
})

Трансформація протоколу: REST → GraphQL

KrakenD підтримує GraphQL backend з REST запиту клієнта:

{
  "endpoint": "/api/v1/user/{id}",
  "backend": [
    {
      "url_pattern": "/graphql",
      "host": ["http://graphql-service:4000"],
      "extra_config": {
        "backend/graphql": {
          "type": "query",
          "query": "query GetUser($id: ID!) { user(id: $id) { id name email } }",
          "variables": {
            "id": "{id}"
          }
        }
      }
    }
  ]
}

Конвертація XML ↔ JSON

# APISIX: конвертація XML відповіді в JSON
plugins:
  xml-json:
    trim_space: true
    cdata_to_json: false
    omit_xml_declaration: false

Графік

Налаштування трансформації запитів/відповідей (заголовки, тіло, фільтрація полів) — 1–2 робочих дня.