Разработка Serverless Functions для сайта (Cloudflare Workers)

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

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

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

Разработка Serverless Functions для сайта (Cloudflare Workers)

Cloudflare Workers работают на V8 isolates — не на Node.js и не на контейнерах. Это даёт холодный старт менее 1 мс и выполнение на 300+ edge-узлах по всему миру. Бесплатный тариф включает 100 000 запросов в сутки.

Отличие от AWS Lambda и Vercel Functions

Workers запускаются в каждом PoP Cloudflare — пользователь из Москвы получает ответ с ближайшего узла, не из us-east-1. Это принципиально для latency-sensitive задач. Ограничение: Workers используют Web API, а не Node.js API — fs, child_process, нативные модули недоступны.

Базовый Worker

// src/index.ts
export default {
  async fetch(request: Request, env: Env): Promise<Response> {
    const url = new URL(request.url);

    if (url.pathname === "/api/contact" && request.method === "POST") {
      return handleContact(request, env);
    }

    if (url.pathname === "/api/geo") {
      return handleGeo(request);
    }

    return new Response("Not found", { status: 404 });
  },
};

async function handleContact(request: Request, env: Env): Promise<Response> {
  const data = await request.json<{ name: string; email: string; message: string }>();

  // Отправка через Resend API
  const emailResponse = await fetch("https://api.resend.com/emails", {
    method: "POST",
    headers: {
      Authorization: `Bearer ${env.RESEND_API_KEY}`,
      "Content-Type": "application/json",
    },
    body: JSON.stringify({
      from: "[email protected]",
      to: ["[email protected]"],
      subject: `Сообщение от ${data.name}`,
      text: `${data.name} (${data.email}): ${data.message}`,
    }),
  });

  if (!emailResponse.ok) {
    return Response.json({ error: "Email send failed" }, { status: 500 });
  }

  return Response.json({ ok: true });
}

// Геолокация из заголовков Cloudflare
function handleGeo(request: Request): Response {
  const cf = (request as any).cf;
  return Response.json({
    country: cf?.country,
    city: cf?.city,
    timezone: cf?.timezone,
    latitude: cf?.latitude,
    longitude: cf?.longitude,
  });
}

Wrangler и деплой

# wrangler.toml
name = "my-site-api"
main = "src/index.ts"
compatibility_date = "2024-11-01"

[vars]
ENVIRONMENT = "production"

[[routes]]
pattern = "yourdomain.com/api/*"
zone_name = "yourdomain.com"
npm install -g wrangler
wrangler login
wrangler dev          # локальная разработка
wrangler deploy       # деплой

Секреты:

wrangler secret put RESEND_API_KEY
wrangler secret put DATABASE_URL

Workers KV: хранение данных

KV — key-value хранилище, eventually consistent. Подходит для кэша, сессий, конфигурации.

// Привязка в wrangler.toml
// [[kv_namespaces]]
// binding = "CACHE"
// id = "abc123..."

export default {
  async fetch(request: Request, env: Env & { CACHE: KVNamespace }) {
    const cacheKey = new URL(request.url).pathname;
    const cached = await env.CACHE.get(cacheKey);

    if (cached) {
      return new Response(cached, {
        headers: { "Content-Type": "application/json", "X-Cache": "HIT" }
      });
    }

    const data = await fetchFreshData(request);
    await env.CACHE.put(cacheKey, JSON.stringify(data), { expirationTtl: 300 });

    return Response.json(data);
  }
};

D1: SQLite на edge

D1 — serverless SQLite-база данных Cloudflare. Подходит для небольших объёмов данных (до 10 GB).

export default {
  async fetch(request: Request, env: Env & { DB: D1Database }) {
    const { results } = await env.DB.prepare(
      "SELECT * FROM products WHERE category = ? ORDER BY created_at DESC LIMIT 20"
    ).bind("electronics").all();

    return Response.json(results);
  }
};

Ограничения Workers

  • CPU time: 10 мс (бесплатно), 30 с (Paid)
  • Память: 128 MB
  • Нет Node.js built-ins (fs, path, crypto — только Web Crypto API)
  • Нет долгоживущих соединений к PostgreSQL (используйте Hyperdrive или HTTP API)

Hyperdrive: PostgreSQL из Workers

export default {
  async fetch(request: Request, env: Env & { HYPERDRIVE: Hyperdrive }) {
    const client = new Client({ connectionString: env.HYPERDRIVE.connectionString });
    await client.connect();

    const result = await client.query("SELECT * FROM users WHERE id = $1", [userId]);
    await client.end();

    return Response.json(result.rows[0]);
  }
};

Hyperdrive проксирует соединения к внешней PostgreSQL через connection pool на стороне Cloudflare, решая проблему latency при подключении к удалённой БД.

Сроки

Базовый Worker с роутингом и 3–5 эндпоинтами — 2–3 дня. Интеграция KV и D1, CI/CD через GitHub Actions — плюс 2 дня.