Edge API: Cloudflare Workers, Vercel Edge, AWS Lambda@Edge

← Вернуться к статьям

Введение

Edge computing — это парадигма, при которой вычисления выполняются ближе к пользователям, на edge серверах, расположенных в разных географических локациях. Edge API позволяют обрабатывать запросы с минимальной задержкой, обеспечивая лучший пользовательский опыт.

В этом руководстве мы разберем три ведущие платформы для Edge API: Cloudflare Workers, Vercel Edge Functions и AWS Lambda@Edge. Узнаем их особенности, преимущества и когда какую платформу использовать.

✅ Что вы узнаете:

📋 Содержание

Что такое Edge API? ⚡

Edge API — это API, который выполняется на edge серверах, расположенных близко к пользователям по всему миру. Вместо того, чтобы обрабатывать запросы на центральном сервере, код выполняется на серверах в разных географических локациях.

✅ Преимущества Edge API:

Архитектура Edge API

🌍 Как работает Edge API:

  1. Пользователь отправляет запрос из любой точки мира
  2. Запрос направляется на ближайший edge сервер
  3. Код выполняется на edge сервере (близко к пользователю)
  4. Ответ отправляется пользователю с минимальной задержкой
  5. При необходимости запрос может быть проксирован на origin сервер

Cloudflare Workers ☁️

Cloudflare Workers — это serverless платформа для выполнения JavaScript, TypeScript, Rust, Python и других языков на edge серверах Cloudflare. Workers выполняются на V8 изолятах, обеспечивая быстрый старт (0ms cold start).

Характеристики Cloudflare Workers:

Пример Cloudflare Worker

// worker.js
export default {
  async fetch(request, env) {
    const url = new URL(request.url);
    
    // Простой API endpoint
    if (url.pathname === '/api/hello') {
      return new Response(JSON.stringify({
        message: 'Hello from Cloudflare Workers!',
        location: request.cf?.country || 'Unknown',
        timestamp: new Date().toISOString()
      }), {
        headers: {
          'Content-Type': 'application/json',
          'Access-Control-Allow-Origin': '*'
        }
      });
    }
    
    // Обработка POST запроса
    if (url.pathname === '/api/users' && request.method === 'POST') {
      const data = await request.json();
      
      // Сохранение в KV (Cloudflare Key-Value store)
      await env.MY_KV.put(`user:${data.id}`, JSON.stringify(data));
      
      return new Response(JSON.stringify({
        success: true,
        id: data.id
      }), {
        headers: { 'Content-Type': 'application/json' }
      });
    }
    
    // Получение из KV
    if (url.pathname.startsWith('/api/users/')) {
      const userId = url.pathname.split('/').pop();
      const user = await env.MY_KV.get(`user:${userId}`);
      
      if (!user) {
        return new Response(JSON.stringify({ error: 'User not found' }), {
          status: 404,
          headers: { 'Content-Type': 'application/json' }
        });
      }
      
      return new Response(user, {
        headers: { 'Content-Type': 'application/json' }
      });
    }
    
    return new Response('Not Found', { status: 404 });
  }
};

// wrangler.toml (конфигурация)
// name = "my-api"
// main = "worker.js"
// compatibility_date = "2025-11-20"
//
// [kv_namespaces]
// binding = "MY_KV"
// id = "your-kv-namespace-id"

Деплой Cloudflare Worker

# Установка Wrangler CLI
npm install -g wrangler

# Логин в Cloudflare
wrangler login

# Деплой
wrangler deploy

# Локальная разработка
wrangler dev

Vercel Edge Functions 🚀

Vercel Edge Functions — это serverless функции, которые выполняются на edge серверах Vercel. Они используют Web API стандарты (Request/Response) и выполняются на V8 изолятах, обеспечивая быстрый старт.

Характеристики Vercel Edge Functions:

Пример Vercel Edge Function (Next.js)

// app/api/hello/route.js (Next.js App Router)
export const runtime = 'edge'; // Важно: указываем edge runtime

export async function GET(request) {
  const { searchParams } = new URL(request.url);
  const name = searchParams.get('name') || 'World';
  
  return new Response(
    JSON.stringify({
      message: `Hello, ${name}!`,
      timestamp: new Date().toISOString(),
      runtime: 'edge'
    }),
    {
      status: 200,
      headers: {
        'Content-Type': 'application/json',
        'Cache-Control': 'public, s-maxage=60, stale-while-revalidate=300'
      }
    }
  );
}

export async function POST(request) {
  const data = await request.json();
  
  // Обработка данных
  const result = {
    success: true,
    received: data,
    processed: new Date().toISOString()
  };
  
  return new Response(JSON.stringify(result), {
    status: 200,
    headers: {
      'Content-Type': 'application/json'
    }
  });
}

// pages/api/users.js (Pages Router)
export const config = {
  runtime: 'edge'
};

export default async function handler(req) {
  if (req.method === 'GET') {
    return new Response(
      JSON.stringify({
        users: [
          { id: 1, name: 'John' },
          { id: 2, name: 'Jane' }
        ]
      }),
      {
        headers: { 'Content-Type': 'application/json' }
      }
    );
  }
  
  return new Response('Method not allowed', { status: 405 });
}

Деплой Vercel Edge Function

# Установка Vercel CLI
npm install -g vercel

# Деплой
vercel

# Локальная разработка
vercel dev

AWS Lambda@Edge 🔷

AWS Lambda@Edge — это расширение AWS Lambda, которое позволяет выполнять функции на edge локациях CloudFront. Lambda@Edge работает в четырех точках: viewer request, origin request, origin response, viewer response.

Характеристики AWS Lambda@Edge:

Пример AWS Lambda@Edge

// lambda-edge.js
exports.handler = async (event) => {
  const request = event.Records[0].cf.request;
  const headers = request.headers;
  
  // Viewer Request - обработка запроса от пользователя
  if (event.Records[0].cf.config.eventType === 'viewer-request') {
    // Добавление кастомного заголовка
    headers['x-custom-header'] = [{
      key: 'X-Custom-Header',
      value: 'Hello from Lambda@Edge!'
    }];
    
    // Редирект на основе геолокации
    const country = headers['cloudfront-viewer-country'];
    if (country && country[0].value === 'RU') {
      return {
        status: '302',
        statusDescription: 'Found',
        headers: {
          location: [{
            key: 'Location',
            value: 'https://ru.example.com'
          }]
        }
      };
    }
  }
  
  // Origin Request - обработка перед запросом к origin
  if (event.Records[0].cf.config.eventType === 'origin-request') {
    // Модификация запроса
    request.uri = request.uri.replace('/api/', '/v1/api/');
  }
  
  // Origin Response - обработка ответа от origin
  if (event.Records[0].cf.config.eventType === 'origin-response') {
    const response = event.Records[0].cf.response;
    
    // Добавление CORS заголовков
    response.headers['access-control-allow-origin'] = [{
      key: 'Access-Control-Allow-Origin',
      value: '*'
    }];
    
    // Кэширование
    response.headers['cache-control'] = [{
      key: 'Cache-Control',
      value: 'public, max-age=3600'
    }];
  }
  
  return request;
};

// Деплой через AWS SAM или Serverless Framework
// serverless.yml
// service: my-edge-api
// provider:
//   name: aws
//   runtime: nodejs18.x
// functions:
//   edgeFunction:
//     handler: lambda-edge.handler
//     events:
//       - cloudFront:
//           eventType: viewer-request
//           pathPattern: '*'

Сравнение платформ 📊

Критерий Cloudflare Workers Vercel Edge AWS Lambda@Edge
Языки JS, TS, Rust, Python, C, C++ JavaScript, TypeScript Node.js, Python
Cold Start ✅ 0ms ✅ 0ms ⚠️ Может быть заметным
CPU Time Limit 10ms (free), 50ms (paid) 25ms (Hobby), 50ms (Pro) 5s (viewer), 30s (origin)
Размер кода 1 MB (free), 10 MB (paid) 4 MB 1 MB (viewer), 50 MB (origin)
Сеть 300+ локаций Глобальная сеть Vercel CloudFront edge локации
Цены Бесплатный план Бесплатный план Платные
Интеграции KV, Durable Objects, R2, D1 Next.js, SvelteKit AWS сервисы
Лучше для Универсальные edge API Next.js приложения AWS инфраструктура

Преимущества Edge API 🎯

✅ Ключевые преимущества:

Use Cases для Edge API

✅ Edge API идеален для:

Best Practices 📚

✅ Рекомендации для Edge API:

Ограничения Edge API

⚠️ Важные ограничения:

Когда использовать Edge API?

💡 Рекомендации:

Заключение

Edge API — это мощный инструмент для создания быстрых и масштабируемых API. Cloudflare Workers, Vercel Edge Functions и AWS Lambda@Edge предоставляют различные возможности для разных сценариев использования.

💡 Ключевые выводы:

Создайте Mock API для тестирования Edge интеграций за 2 минуты

Хотите протестировать Edge API интеграцию? Создайте Mock API с помощью LightBox API и протестируйте вашу логику без необходимости настраивать сложную инфраструктуру.

Попробовать бесплатно →
← Вернуться к статьям