Баги в проде №1/10 (Сериал)
В 2022 году Знакомые предложили потестировать ecommerce стартап из США. Part time. Конечно я согласился.
Первый день на проекте. Мне дали одно из API интернет-магазина. Документация: одна страница в Confluence. Три эндпоинта. Без примеров.
Коллега: «Там всё просто. GET /products, POST /orders, DELETE /cart. Дерзай».
Через час я нашёл первый баг. Через два — ещё три.
Спойлер: за неделю я нашёл 23 бага в этом «простом» API.
Этот сериал - хроника той недели. Без прикрас, без выдумок. Только реальные баги, реальные разговоры с разработчиками и реальные решения. Все за-NDA-ено, но баги реальные.
Выпуск 1: «GET /products — пагинация без границ»
Открываю Postman. GET /products. Жму Send.
200 OK. 10 товаров. Отлично.
GET /products?page=2 → 10 товаров. Работает.
GET /products?page=100 → 200 OK. 0 товаров.
GET /products?page=-1 → 200 OK. Те же 10 товаров.
GET /products?page=abc → 500 Internal Server Error.
Три бага в одной пагинации:****😳 1. Отрицательный номер страницы — молча сбрасывается на первую 2. Несуществующая страница — пустой массив вместо 404 3. Невалидный page — сервер падает
Итог: 3 бага за 5 минут. Хорошее начало недели.
Заглянул в код. Там был обычный LIMIT 10 OFFSET (page-1)*10 Без сортировки, без валидации. OFFSET на отрицательном page просто срабатывал как OFFSET 0. Пустая страница — тоже особенность OFFSET: он не знает, сколько всего записей.
А page=abc падал, потому что никто не проверял тип параметра.
Через пару дней я вернусь к этой же пагинации — и найду ещё один баг, связанный с фильтрами. Но об этом в другом выпуске.
Вопрос к вам: Встречали проблемы с пагинацией ВНЕ работы на чьих-то сайтах? 👇
➡️ Ждёте продолжение? Ставьте 🔥