Розділіть користувача, завдання та рахунок
У пошуку матеріалів про онбординг беруть участь користувач продукту, внутрішнє завдання та обліковий запис домену, що оплачує звернення. Зв'язок між користувачем і дозволеним завданням перевіряє ваш сервер. Браузер має отримувати результат. Переданий йому спільний ключ дозволив би витрачати кредити поза межами, установленими в інтерфейсі.
Ніколи не зберігайте повний API-ключ у клієнтському коді, особливо якщо він відправляється у браузер. Не розміщуйте секрет у публічних репозиторіях, URL-адресах запитів і діагностичному виводі. Використовуйте захищену серверну конфігурацію, наприклад змінні середовища чи сховище секретів, і виключайте заголовок із помилок та журналів. Саме перенесення рядка до змінної середовища не гарантує безпеки. Перевірте місця читання, пересилання та запису секрету, включно зі складанням і розгортанням.
Зберіть лише дозволений запит
Для першого завдання зафіксуйте адресу сервера архіву й дозволений маршрут пошуку. Складіть q=onboarding, subreddit=SaaS та limit=3 із перевірених значень. Додавайте ключ лише на етапі вихідного запиту. Не пересилайте його на довільну адресу від відвідувача; дозвіл на виконання завдання перевіряйте раніше.
Почніть із 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 надає статичний опис, а не перевіряє доступність архіву. Збережена вибірка та обґрунтоване рішення зупинитися також є результатом роботи.