INTEGRITY Документация

Получение JSON Response для мобильного и другого небраузерного трафика

Если нужно управлять трафиком в среде без браузера, например в мобильном или веб-приложении, Cloudflare предоставляет JSON-совместимый зал ожидания, доступ к которому можно получить через ваши конечные точки API:

  1. Когда пользователь поставлен в очередь, мы возвращаем собственный JSON-ответ.
  2. Когда пользователь покидает зал ожидания, мы передаём запрос исходному серверу и возвращаем его ответ, будь то JSON, XML, HTML-страница и так далее.

Чтобы получать ответ зала ожидания в формате JSON, выполните следующие действия:

Шаг 1: включение JSON Response

Чтобы получать ответ в формате JSON, сначала включите переключатель JSON Response в зале ожидания.

Шаг 2: получение данных JSON

Отправьте запрос к конечной точке своего зала ожидания с заголовком Accept: application/json. Обратите внимание, что заголовок должен точно соответствовать Accept: application/json. Если это что-то иное или содержит дополнительный контент, например Accept: application/json, text/html ответ не будет возвращён в формате JSON. Повторяйте запрос каждые refreshIntervalSeconds чтобы пользователи продвигались в очереди.

Запрос
curl "https://example.com/waitingroom" \
--header "Accept: application/json"
Ответ
{
	"cfWaitingRoom": {
		"inWaitingRoom": true,
		"waitTime": 5,
		"waitTimeKnown": true,
		"waitTimeFormatted": "5 minutes",
		"queueIsFull": false,
		"queueAll": false,
		"lastUpdated": "2021-08-03T23:46:00.000Z",
		"refreshIntervalSeconds": 20
	}
}

Cookie-файлы в заголовке запроса

Работа Waiting Room строится на cookie-файле зала ожидания, который определяет позицию пользователя в очереди. Поэтому этот cookie-файл обновляется в заголовках ответа при каждом запросе. Для каждого запроса к конечной точке, защищённой Waiting Room, приложение должно передавать актуальный cookie-файл, полученный при предыдущем запросе. Это обязательно независимо от того, находился пользователь в очереди или нет. Если запрос не содержит cookie-файла, зал ожидания сочтёт пользователя новым и вернёт новый cookie-файл в заголовке ответа, из-за чего пользователь окажется в конце очереди. Поэтому при использовании зала ожидания вне браузера важно передавать cookie-файл зала ожидания в заголовке запроса и обновлять его после каждого запроса.

См. Файлы cookie Waiting Room, где приведены дополнительные сведения.

Продвижение по очереди

В среде браузера страница автоматически обновляется каждые refreshIntervalSeconds чтобы пользователь продвигался в очереди. В среде без браузера, где используется JSON-совместимый API Waiting Room, ожидается, что ваша серверная служба (или API) также обновляет запрос к настроенной конечной точке Waiting Room каждые refreshIntervalSeconds чтобы обеспечить продвижение пользователя в очереди.

Ниже перечислены некоторые места, где можно использовать ответ в формате, удобном для JSON (список не является исчерпывающим):

  1. Для трафика мобильных приложений

    • Интеграция переменных Waiting Room: создайте новый шаблон в мобильном приложении для получения ответа в формате JSON. Полный список этих переменных приведён в разделе json_response_enabled параметр в Документация Cloudflare API.
    • Разрешить cookie-файлы: как уже упоминалось, зал ожидания требует cookie-файлов, и вашему мобильному приложению потребуется поддержка cookie-файлов. Для удобства рассмотрите использование менеджера cookie-файлов, например CookieJar ↗.
    • Обработка данных JSON : отправьте запрос к конечной точке Waiting Room с Accept: application/json заголовок.
  2. Внутри Cloudflare Workers (или в собственном серверном сервисе)

    • Интеграция переменных Waiting Room: ожидайте ответ в формате JSON в серверном API. Полный список этих переменных приведён в разделе json_response_enabled параметр в Документация Cloudflare API.

    • Включение cookie-файлов в заголовок запроса: как уже упоминалось, зал ожидания требует cookie-файлов, и вашему серверному API потребуется поддержка cookie-файлов. Для удобства рассмотрите использование менеджера cookie-файлов, например CookieJar ↗.

    • Включение JSON Response : через панель управления или через API.

    • Обработка данных JSON : отправьте запрос к конечной точке Waiting Room с Accept: application/json заголовок.

      Ниже приведён пример использования конечной точки зала ожидания внутри Worker. Заголовки запроса включают необходимый accept и cookie значения заголовков, которые требуются для Waiting Room API. Заголовок accept обеспечивает возврат ответа в формате JSON, если пользователь находится в очереди. В противном случае, если запрос отправляется источнику, пользователю возвращается тот ответ, который вернул источник. В этом примере жёстко заданный __cfwaitingroom значение встроено в поле cookie. Однако в реальном приложении мы ожидаем, что cookie-файл, возвращённый API Waiting Room, будет использоваться во всех последующих запросах, чтобы пользователь корректно занимал место в очереди и был пропущен к источнику, когда наступит его очередь.

const waitingroomSite = "https://examples.cloudflareworkers.com/waiting-room";

export default {
	async fetch(request, env, ctx) {
		const init = {
			headers: {
				accept: "application/json",
				cookie: "__cfwaitingroom=F)J@NcRfUjXnZr4u7x!A%D*G-KaPdSgV",
			},
		};

		return fetch(waitingroomSite, init)
			.then((response) => response.json())
			.then((response) => {
				if (response.cfWaitingRoom.inWaitingRoom) {
					return Response("in waiting room", { "content-type": "text/html" });
				}
				return new Response(response);
			});
	},
};