Reddit API Gateway
Выбор языка

Проведите одно задание через границы доступа и расходов

Проследите задание об онбординге: проверка доступа, добавление ключа, учёт повторов, сохранение ответа и замена секрета в серверной части продукта.

Разделите пользователя, задание и оплачивающий аккаунт

В функции поиска материалов об онбординге участвуют пользователь продукта, внутреннее задание и аккаунт домена, с которого оплачивается архивное чтение. Связь пользователя с заданием проверяет ваш сервер. Браузеру передавайте разрешённый результат. Общий ключ позволил бы его обладателю расходовать кредиты вне ограничений, установленных в интерфейсе.

Не размещайте секрет в браузерном JavaScript, публичных репозиториях, URL запросов и диагностическом выводе. Используйте защищённую серверную конфигурацию, например переменные окружения или хранилище секретов, и исключайте заголовок из ошибок и журналов. Сам перенос строки в переменную окружения не гарантирует безопасности. Проверьте места чтения, пересылки и записи секрета вашим приложением, включая сборку и развёртывание.

Соберите разрешённый запрос

Для первого задания зафиксируйте адрес сервера архива и разрешите нужный маршрут поиска. Соберите q=onboarding, subreddit=SaaS и limit=3 из проверенных значений. Добавляйте ключ непосредственно перед исходящим запросом. Нельзя отправлять его на произвольный URL посетителя; проверка доступа к заданию должна завершиться раньше.

Начните с https://api.redditapigateway.com/v1/search?q=onboarding&subreddit=SaaS&limit=3 — примера с главной. Ваш сервер может фиксировать хост архива и разрешённые маршруты, проверять параметры и добавлять X-API-Key: <ключ> либо Authorization: Bearer <ключ>. Оба варианта используют ключ архива. Не принимайте произвольный адрес посетителя как цель запроса с учётными данными. Cookie Secure HttpOnly панели счёта обслуживает отдельную аутентификацию.

Запишите попытку до решения о повторе

Присвойте заданию внутренний идентификатор и ограничьте число попыток. Записывайте маршрут, фильтры, номер попытки и её исход без заголовков авторизации. Например, разрешите всего три обращения, включая другие страницы и повторы. Это ваша логика продукта: архив не предоставляет такой пользовательской квоты или журнала заданий.

Разберите неоднозначный исход: первый успешный пустой ответ списал кредит; у второй попытки ответ потерялся, но списание могло произойти; успешный повтор стоит ещё кредит. Потерю ответа нельзя помечать как бесплатный сбой. Ошибка источника возвращает резерв, тогда как ошибка разбора или записи в вашей базе не отменяет оплаченный успех.

Сохраните ответ перед интерпретацией

Сохраните ответ до преобразования для экрана. Записи плоские, поля могут отсутствовать, а ссылки parent_id и link_id — вести к неполученным материалам. Локальная группировка не доказывает полноту беседы. Даты задаются как YYYY-MM-DD в UTC, день to включён. q ищет по title и text с AND между словами внутри совпавшего поля; min_score фильтрует, а _doc не задаёт рейтинг или хронологию.

Согласуйте замену ключа

Подготовьте порядок замены секрета с остановкой запуска новых заданий. После входа и подтверждения пароля перевыпуск немедленно отключает прежний ключ. Обновите конфигурацию отправляющих запросы процессов и только затем возобновляйте работу. Периода одновременной действительности ключей нет. При передаче нового значения также исключите его из диагностики и ограничьте доступ к хранилищу.

Лимит на вашем сервере ограничивает только проходящие через него обращения. Он не остановит прямое использование утёкшего ключа. При расследовании сопоставляйте журнал попыток с данными аккаунта, но не считайте всплеск нагрузки доказательством утечки. Перевыпуск не возвращает потраченные кредиты. Пароль тоже нужно сохранить: функции его сброса и письма с ключом нет.

Проверьте весь путь на небольшом задании

В завершение выполните небольшое разрешённое задание и разберите результат. Для 400 проверьте параметры, для 401 — ключ, для 402 — баланс, для 429 — частоту. За запрос доступно до 100 записей и до 100 страниц на запрос с выбранными фильтрами, без гарантии полного охвата. Публичный /v1/status сообщает статическое описание, а не здоровье архива. Сохранённая выборка и зафиксированное решение остановиться — допустимый результат работы продукта.