Cloudflare Worker принимает Request и возвращает Response по публичному URL без настройки собственного VPS. Соберём маленький API заметок, запустим его через Wrangler, проверим GET и POST, затем разберём ограничения serverless-среды. Код использует стандартные Web API и не хранит данные между запросами.
Фраза «без сервера» скрывает платформу, деплой и ограничения runtime. Worker всё равно выполняется на серверной инфраструктуре, просто операционную систему обслуживает провайдер. В этой статье вы соберёте публичный JSON endpoint с двумя методами. Финальный результат можно проверить без догадок: wrangler dev отвечает локально, deploy выдаёт HTTPS URL, а неверный JSON возвращает 400 вместо падения.
create-cloudflare готовит Worker, конфигурацию Wrangler и локальные команды.
fetch получает стандартный Request и возвращает Response.
wrangler deploy собирает код и выдаёт адрес workers.dev или route.
Как запрос попадает в Cloudflare Worker
В модульном формате default export содержит async fetch. URL помогает выбрать путь, request.method разделяет GET и POST, а Response.json сериализует тело. Процесс не слушает порт и не вызывает app.listen. Для Cloudflare Workers держите этапы раздельно: ввод, проверка, основное действие и вывод. Такой маршрут позволяет остановиться в конкретной точке, увидеть фактические данные и исправить одну причину вместо случайной перестановки строк.
| Этап | Действие | Проверяемый результат |
|---|---|---|
| Создание | C3 генерирует проект и wrangler.jsonc | Есть src/index.js |
| Локально | wrangler dev поднимает совместимый runtime | Endpoint доступен на localhost |
| Запрос | fetch получает Request | Метод и pathname прочитаны |
| Деплой | wrangler deploy публикует bundle | Получен HTTPS URL |
Один handler работает локально и на платформе, но только в рамках поддерживаемых Web API. У Cloudflare Workers каждый этап оставляет наблюдаемый след, поэтому следующий шаг начинается только после проверки предыдущего.

От входных данных до видимого результата. Wrangler повторяет платформенный runtime
Пишем JavaScript API заметок
Установите актуальный Node.js и выполните npm create cloudflare@latest -- notes-worker. В мастере выберите Hello World example, Worker only и JavaScript, а первый deploy отложите. Перейдите в каталог и запустите npm run dev. Официальный CLI создаёт wrangler.jsonc и src/index.js. Авторизация потребуется только перед реальной публикацией.
const json = (data, status = 200) =>
Response.json(data, {
status,
headers: { "cache-control": "no-store" },
});
export default {
async fetch(request) {
const url = new URL(request.url);
if (url.pathname !== "/api/note") {
return json({ error: "route not found" }, 404);
}
if (request.method === "GET") {
return json({ text: "Learn one Web API today" });
}
if (request.method === "POST") {
let body;
try {
body = await request.json();
} catch {
return json({ error: "invalid JSON" }, 400);
}
if (typeof body.text !== "string" || !body.text.trim()) {
return json({ error: "text is required" }, 400);
}
return json({ text: body.text.trim() }, 201);
}
return json({ error: "method not allowed" }, 405);
},
};- GET /api/note отвечает JSON и no-store.
- POST с text возвращает 201.
- Сломанный JSON и пустой text возвращают 400.
- Другой метод возвращает 405, другой путь 404.
Вспомогательная json-функция удерживает одинаковые заголовки и форму ответа, а handler остаётся читаемым. Пример Cloudflare Workers специально ограничен одним пользовательским сценарием, чтобы назначение каждой строки оставалось видимым.

Что отличает устойчивый проект от случайного запуска. Без VPS не означает без инфраструктуры
Чем Worker отличается от Node.js сервера
Workers runtime построен на V8 и реализует многие Web Platform APIs. Request, Response, URL и fetch знакомы по браузеру. Node.js модули и файловая система доступны не так, как на обычном сервере, поэтому библиотеку нужно проверять на совместимость. Handler может выполняться рядом с пользователем, однако данные и внешние запросы имеют собственную географию. wrangler dev моделирует среду лучше, чем прямой node src/index.js.
| Часть | За что отвечает | Что проверить |
|---|---|---|
| default export | Регистрирует события Worker | Есть async fetch |
| Request | Содержит method, URL и body | JSON читается один раз |
| Response | Несёт status, headers и body | Формат ошибок единый |
| Wrangler | Разрабатывает и публикует | Конфигурация лежит в проекте |
| Storage | Хранит постоянные данные | Не заменён глобальной переменной |
Worker не гарантирует долгоживущий процесс. Инициализация модуля может переиспользоваться для нескольких запросов, но полагаться на это для данных нельзя. CPU time и лимиты зависят от тарифа и актуальных правил платформы. Для CORS добавляйте заголовки только под нужный origin и обрабатывайте OPTIONS. Секреты задаются через Wrangler secrets, а не wrangler.jsonc. Cache API полезен для идемпотентных GET, но POST-ответы обычно не кешируют.
Проверяем методы, JSON и деплой
Запустите npm run dev и проверьте GET. Отправьте POST с корректным JSON, затем с пустой строкой и сломанным телом. Добавьте query-параметр uppercase=1, который меняет только представление GET. Напишите маленький test через Vitest или встроенный шаблон Workers. После локального успеха выполните npx wrangler deploy, сохраните URL и повторите четыре запроса. Затем удалите учебный Worker, если он больше не нужен.
- Получите локальный GET 200.
- Отправьте POST и получите 201.
- Проверьте invalid JSON 400.
- Проверьте PUT 405.
- Добавьте один query-параметр.
- Повторите сценарии на deploy URL.
- Локальный runtime отвечает.
- Все статусы различаются.
- Состояние не хранится в памяти.
- Секреты отсутствуют в config.
Serverless упрощает сервер, но не отменяет контракт API, хранение данных и безопасность публичного адреса. После этой проверки измените одно правило Cloudflare Workers и заранее запишите ожидаемый результат. Так копирование превращается в понимание.

Четыре проверки перед следующим шагом. Публичный endpoint требует границ
Что учесть перед настоящим serverless API
Для постоянных заметок выберите хранилище по задаче и напишите миграцию данных. Добавьте аутентификацию до write-route, CORS для конкретного фронтенда и rate limit. Логи не должны содержать токены или полные персональные данные. Закрепляйте compatibility_date и обновляйте её после тестов, потому что runtime развивается. Для локального теста используйте Wrangler, а не предполагайте, что любой Node-пакет заработает на edge.
Как изучить тему в Кодике
Закрепите fetch, Request, Response, async/await и JSON в JavaScript, затем добавьте деплой как отдельный шаг. В Кодике сначала восстановите чистую логику без фреймворка, затем верните библиотеку и интерфейс Cloudflare Workers.
| Шаг | Что разобрать | Мини-проверка |
|---|---|---|
| 1 | Web API | Вернуть Response.json |
| 2 | URL и method | Развести GET и POST |
| 3 | Ошибки | Поймать invalid JSON |
| 4 | CLI | Запустить wrangler dev |
| 5 | Serverless | Объяснить отсутствие памяти между запросами |
Если handler можно проверить обычным набором Request, платформа перестаёт быть чёрным ящиком. Финальная проверка для Cloudflare Workers: закрыть статью, объяснить путь данных и добавить одну функцию без копирования готового блока.
Worker экспортирует fetch и не открывает порт.
Используйте подходящее постоянное хранилище.
Задавайте секрет через защищённый механизм Wrangler.
Проверьте POST, invalid JSON, 404 и 405.
Что получится в итоге

Один Worker обрабатывает GET и POST, возвращает ясные статусы и публикуется по HTTPS без ручной настройки VPS.
Нужен ли app.listen в Cloudflare Worker?
Нет, Worker экспортирует объект с fetch, а runtime сам передаёт ему Request.
Можно ли хранить заметки в глобальном массиве Worker?
Нет, память изолята не является постоянным хранилищем между запросами.
Чем проверять Worker локально?
Используйте Wrangler dev, потому что он запускает совместимую с платформой среду.
Как понять, что учебный проект Cloudflare Workers действительно работает?
Проверьте основной сценарий Cloudflare Workers, неверный ввод, повторный запуск и один граничный случай. Затем объясните путь данных своими словами.
Можно ли начать с готового кода Cloudflare Workers из статьи?
Да. Сначала добейтесь результата Cloudflare Workers, затем измените одно правило и восстановите ключевой файл без копирования.
JavaScript и async закрепите в курсе JavaScript, а серверную архитектуру в профессии Backend.
Сравните маршрут с Express API, клиент с Fetch API и постоянное соединение с WebSocket-чатом.