Баги в проде №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 падал, потому что никто не проверял тип параметра.

Через пару дней я вернусь к этой же пагинации — и найду ещё один баг, связанный с фильтрами. Но об этом в другом выпуске.

Вопрос к вам: Встречали проблемы с пагинацией ВНЕ работы на чьих-то сайтах? 👇

➡️ Ждёте продолжение? Ставьте 🔥

Баги в проде №1/10 (Сериал)
В 2022 году Знакомые предложили потестировать ecommerce стартап из США. Part time. Конечно я согласился.
Первый день на проекте. Мне дали одно из API интернет-магазина | Сетка — социальная сеть от hh.ru