Выбор языка

Спроектируйте серверный контроль доступа к архиву Reddit

Разделите публичный статус, права внутренних клиентов и платные запросы. Храните ключ на сервере и ограничивайте страницы, очереди и повторы.

Проверяйте права приложения до расхода кредита

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

Храните ключ в защищённой конфигурации сервера. Вместо пересылки произвольного URL или набора параметров предложите внутренним клиентам несколько разрешённых операций. Проверьте сообщество, тип записи и формат дат по правилам своего приложения, затем соберите документированный GET-запрос. Такие правила принадлежат вашей интеграции; архив не предоставляет отдельный движок пользовательских разрешений или готовую систему распределения бюджета между сотрудниками.

Не переносите сюда токены Reddit OAuth, разрешения или сессионные cookie Reddit. Поддерживаются X-API-Key: <ключ> и Authorization: Bearer <ключ>; Bearer передаёт именно ключ архива. Сессия панели счёта через Secure HttpOnly отделена от этих запросов. Публичный /v1/status не требует ключа и кредита, но показывает лишь статическое описание сервиса и ответ HTTP-приложения.

Разделите наблюдение за системой и платное задание

Проверьте https://api.redditgateway.com/v1/search?q=database&subreddit=backend&limit=3 как ограниченный защищённый запрос. q задаёт текст, subreddit — сообщество, limit — максимальный размер страницы. Сохраните параметры, ответ и собственный идентификатор операции без секрета. Оценивайте HTTP-результат этого обращения отдельно от статуса: успешный публичный ответ не доказывает, что поиск по архиву доступен и оплачен.

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

При работе с данными учитывайте, что ответы API содержат плоские записи, а не собранные сервером древовидные структуры. Если в возвращаемых записях присутствуют поля parent_id и link_id, клиент может сгруппировать их локально, но полной гарантии беседы или родства не обеспечивается. Также отсутствуют фильтры запросов для link_id или parent_id, поэтому клиенту необходимо самостоятельно обрабатывать эти связи. Это требует тщательного проектирования логики группировки данных на стороне сервера клиента.

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

Ограничьте страницы, повторы и смену ключа

Используйте только q, subreddit, author, kind, from, to, min_score, limit и page в поисковых маршрутах. kind принимает post или comment; даты YYYY-MM-DD заданы в UTC, день to включён полностью. min_score фильтрует числовой порог без сортировки. _doc — внутренний порядок, не хронология или релевантность. /v1/item требует id, а /v1/subreddits принимает prefix и limit без мониторинга текущей активности сообщества.

На странице доступно до 100 записей, page не превышает 100. eq означает точное число совпадений запроса, gte — нижнюю границу, unknown — ненадёжный итог или null. Это не доказательство полной выгрузки. Деление периодов и локальное удаление дублей также не устанавливают полноту. Сохраняйте ограничения рядом с набором данных; окончание собственной очереди не означает, что получена вся история Reddit.

Обрабатывайте 400, 401, 402 и 429 по причине. Некорректные запросы не списывают баланс, сбой источника возвращает резерв, потерянный ответ может скрывать оплаченный успех. Каждый успешный повтор стоит ещё один кредит. До пополнения прочитайте цены и страницу ключа: $1 за 1000 успешных запросов, минимум $50 для платной покупки. Регенерация с подтверждением пароля сразу отключает старый ключ; согласуйте обновление собственной конфигурации.

Получить API-ключ