Analyst IT
12.6K subscribers
174 photos
107 videos
7 files
1.25K links
Авторский канал для аналитиков в индустрии ИТ. Все, что надо знать аналитику в одном месте.

Сотрудничество: @the_real_bird
BA/SA: @ba_and_sa

Регистрация РКН: https://knd.gov.ru/license?id=673c6a15b7aeb106ce045ee5&registryType=bloggersPermission
#J6THB
Download Telegram
Салют! Хочу тоже затронуть тему, проектировать REST API и рассказать на своем примере

Знаете, что меня до сих пор выбивает из равновесия? Когда на ревью спрашиваешь разработчика: “почему эндпоинт называется именно так?” — и в ответ: “ну, так исторически сложилось” 🤯 За 10 лет я слышала это столько раз, что уже завела внутренний счётчик.

🚨 Давайте разберём REST API нормально — один раз, по-человечески, с примером.

Сначала главное: REST — это не технология, это договорённость

REST — архитектурный стиль. Просто набор правил о том, как клиент и сервер общаются через HTTP. И первое правило, которое нарушают чаще всего — ресурсы именуются существительными, не глаголами.

Так не надо:
POST /getUser
POST /createOrder
GET /deleteProduct?id=5


Так правильно:
GET    /users/{id}
POST /orders
DELETE /products/{id}

HTTP-методы сами несут смысл действия — GET получить, POST создать, PUT/PATCH обновить, DELETE удалить. Глагол в URL — это дублирование, которое потом запутает всех, включая вас саму через полгода.

💡 Живой пример: API интернет-магазина

Есть товары, заказы, пользователи. Поехали.

Базовые операции:
GET    /products        — список товаров
GET /products/{id} — конкретный товар
POST /products — создать товар
PATCH /products/{id} — обновить часть данных
DELETE /products/{id} — удалить товар


Здесь сразу вопрос, который почти никогда не задают вслух: PUT или PATCH?

PUT — заменяет ресурс целиком и обязан быть идемпотентным — то есть хоть десять раз вызови с одними данными, результат одинаковый
PATCH — обновляет только то, что передали

На практике PATCH выигрывает почти всегда — никто не хочет слать весь объект ради изменения одного поля статуса.

Вложенные ресурсы — и вот тут начинается самое интересное

Заказ принадлежит пользователю. Отражаем это в структуре:
GET  /users/{userId}/orders             — все заказы пользователя
GET /users/{userId}/orders/{orderId} — конкретный заказ
POST /users/{userId}/orders — создать заказ


Но если заказы нужны и сами по себе — например, в админке — добавляем отдельно:
GET /orders/{id}


И вот моё личное правило, выстраданное на проектах:

Вложенность глубже двух уровней — тревожный сигнал. Если у вас
/users/{id}/orders/{orderId}/items/{itemId}/reviews — это не REST, это маршрут до боли.

Коды ответов — то, на что аналитики машут рукой зря

“Разработчик разберётся” — нет. Или разберётся по-своему, и тогда фронт получает 200 с телом {"error": true} и тихо плачет.

Минимальный джентльменский набор:

200 - Успешный GET, PATCH, PUT
201 - Успешный POST — ресурс создан
204 - Успешный DELETE — тело пустое
400 - Синтаксически сломанный запрос (битый JSON и т.п.)
401 - Не авторизован 403 - Авторизован, но нет прав 404 - Ресурс не найден 409 - Конфликт (дубль email, например)
422 - Запрос понят, но данные не прошли валидацию
500 - Ошибка сервера

Отдельно про 400 vs 422 — это путают постоянно. 400 — когда запрос синтаксически сломан, сервер вообще не смог его прочитать. 422 — запрос понятен, но внутри что-то не то: поле обязательное, формат не тот, логика не сходится. Для ошибок валидации форм почти всегда нужен именно 422.

И 401 vs 403 — классика жанра: 401 = “кто ты вообще?”, 403 = “знаю кто ты, но нет”.

Формат ошибки — договоритесь до начала разработки

Лучший момент для этого — старт проекта. Худший — когда фронт уже написал сорок обработчиков.

Хорошо:
{
"error": {
"code": "VALIDATION_ERROR",
"message": "Поле email обязательно",
"field": "email"
}
}


Плохо:
Второй вариант — это не API, это квест.
{
"status": false,
"msg": "err"
}


Версионирование — заложите сразу

API когда-нибудь изменится. Поменяется логика, добавятся поля, что-то удалится.
Если не заложить версионирование с самого начала — первое же обновление превратится в боль для всех.

Самый простой и понятный способ:
/api/v1/products
/api/v2/products

___________

Источник: @ba_and_sa

💙 BA|SA | 💬 BA|SA
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8👍54
This media is not supported in your browser
VIEW IN TELEGRAM
⚠️Профессия системного аналитика продолжает меняться: появляются новые инструменты, растут требования к качеству решений, усиливается роль аналитика в проектировании архитектуры и взаимодействии с бизнесом.
При этом одни навыки становятся критически важными для карьерного роста, а другие постепенно превращаются в базовый минимум.

Мы подготовили для вас актуальную программу обучения на курсе «Системный аналитик. Управление командой». Изучите программу обучения на сайте.

🎁Записывайтесь на бесплатный вебинар:
«Какие навыки прокачать, чтобы стать экспертом в системном анализе в 2026 году».
25 июня в 20:00 мск
Задайте вопросы спикеру и познакомьтесь подробнее с программой обучения на живом вебинаре!

Перейти на сайт ➡️ OTUS.RU

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
🔥 Приглашаем на бесплатный открытый вебинар курса «Микросервисная архитектура»:

«RabbitMQ против Kafka — что выбрать для вашей структуры: сравнение и лучшие практики»

🗓 Когда: 24 июня, 20:00 (мск)

🚀 О чём этот урок? Обзор двух ведущих решений для работы с брокерами — RabbitMQ и Kafka. Разберём их основные особенности, преимущества и недостатки, а также рассмотрим реальное использование ключей. Вы узнаете, как выбрать тот или иной инструмент в зависимости от требований вашей системы, и дадите рекомендации по их внедрению и настройке для повышения производительности и надежности

Что будет на вебинаре:
Обзор RabbitMq - устройство, принципы работы, отправка и получение сообщений
— Обзор Kafka - устройство, принципы работы, отправка и получение сообщений
— Сравнение этих двух систем

👉 Зарегистрируйтесь https://clck.ru/3UK3eE

Бесплатное занятие приурочено к старту курса «Микросервисная архитектура», обучение на котором позволит освоить микросервисы: Docker, Kafka, API и стать мастером производительных систем.
🎁Бонус при покупке курса - мини-курс от платформы Алгокод с подготовкой к собеседованиям по System design.

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576
Дарим подарки нашим подписчикам 🎁

Мы с ребятами решили порадовать вас интересными подарками от наших каналов:

- Внешний жесткий диск
- Настольная игра от Школы Систем Аналист
- Футболка BA | SA

Условия максимально простые:
- подписаться на каналы;
- нажать «участвую».

1. Системный анализ | Ольга Пономарева
2. Business | System analyst
3. Analyst IT

07.07 в 17:00 мы проведем розыгрыш и троим из вас улыбнется удача)))
Please open Telegram to view this post
VIEW IN TELEGRAM
4
Системный аналитик помогает бизнесу и разработке говорить на одном языке: разбирает задачи компании, описывает требования, проектирует IT-решения и следит, чтобы система работала на реальные цели бизнеса.

Онлайн-магистратура СПбГУ и Нетологии «Системный анализ и интеллектуальные системы управления бизнес-процессами» готовит специалистов на стыке IT и управления.

В программе сочетаются академическая база СПбГУ и прикладные инструменты Нетологии. Студенты изучают математическое моделирование, алгоритмы, системный анализ, Python, BI-системы, no-code-инструменты, управление проектами и подходы к внедрению искусственного интеллекта.

Такой набор навыков помогает работать со сложными бизнес-процессами: находить узкие места, снижать риски при разработке, формулировать требования к системам и сопровождать внедрение IT-решений.

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

Подробнее о программе

Реклама. ООО “Нетология” ОГРН 1207700135884 Erid: 2VSb5w7d2U2
ТЗ на API: что написать, чтобы разработчик не придумывал за вас

Однажды я получила от разработчика готовый эндпоинт, который работал. Технически. Но в таком формате, что фронт не мог его использовать без дополнительного преобразования. Когда спросила почему — пожал плечами: “в ТЗ не было написано как, я сделал как удобнее”.

И знаете что? Он был прав.


С тех пор у меня есть чеклист того, что обязательно должно быть в ТЗ на API. Делюсь.

1️⃣ Название и назначение

Не “создать API для заказов”, а конкретно:

Эндпоинт: Создание заказа
Используется: мобильное приложение, личный кабинет
Контекст “кто вызывает” влияет на авторизацию и требования к нагрузке.


2️⃣ Метод и URL

POST /api/v1/orders

Точный адрес, метод, версия. Без этого разработчик придумает сам.

3️⃣ Авторизация

Bearer token (JWT)
Authorization: Bearer {token}


Не написали — получите либо открытый эндпоинт, либо неожиданную схему авторизации.

4️⃣ Тело запроса

Каждое поле с типом, обязательностью и ограничениями:

{
"userId": 123, // integer, обязательное
"items": [...], // array, обязательное, min: 1
"comment": "..." // string, необязательное, max: 500
}


Для необязательных полей — что происходит если не передали? Дефолт? Игнорируется? Напишите явно.

5️⃣ Ответ при успехе

HTTP 201 Created
{
"orderId": 789,
"status": "created",
"createdAt": "2026-06-17T10:00:00Z" // UTC, ISO 8601
}


Формат даты фиксируйте явно — иначе получите локальное время сервера и долгие поиски расхождений.

6️⃣ Ошибки — то, что забывают в 80% ТЗ

422 - Не передан обязательный параметр
404 - Пользователь не найден
401 - Нет авторизации
409 - Товар недоступен

Для каждого кода — тело ответа с понятным error code. Договоритесь о едином формате ошибок на весь проект и зафиксируйте один раз.

7️⃣ Бизнес-логика

Самое недооценённое. Структура понятна — но что происходит внутри?

Пишите явно: заказ создаётся только если все товары в наличии, после создания резервируется остаток, уходит email-уведомление. Если этого нет в ТЗ — разработчик придумает сам. Иногда угадывает. Чаще нет.

8️⃣ Нефункциональные требования

Таймаут: не более 2 секунд
Нагрузка: до 100 запросов в минуту


Если нужна защита от дублей — опишите механизм явно через Idempotency-Key в заголовке. Само собой не появится.

Хорошее ТЗ — это не формальность. Это единственный способ получить то, что вы имели в виду, а не то, что разработчик имел в виду за вас 🙂

🧐 Если было полезно, ставьте реакции, буду делиться больше такой информацией))

___________

Источник: @ba_and_sa

💙 BA|SA | 💬 BA|SA
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥13👍65🤯1
Киска в зоне риска... на сокращение😾

Если у тебя лапки руки на работе опускаются от страха сокращений, и ты в панике бросаешься мониторить вакансии курьера - остановись

Первыми сокращают специалистов с пробелами в базовой инженерии БД. Достаточно понимать, как работают репликация, партиционирование и шардирование

Вот поэтому мы решили дать тебе мощную техническую базу! 😎 10 июля в 19:00 (МСК) проведем бесплатный веб “Масштабирование реляционных БД. На чем сыпятся даже сеньоры”

Разберемся, как система ведет себя на проде под нагрузкой. Этот хард-скилл защитит тебя от любых кризисов, сделает востребованным и даст возможность уйти в топовую компанию на нормальные деньги

Бонус: кто будет на эфире вживую, получит возможность пройти аудит навыков и получить персональный карьерный трек бесплатно

Регистрируйся по ссылке

Erid: 2SDnjezxCUS
Название: ООО "СТЕП БАЙ СТЕП"
ИНН: 0800013217
4
Как читать чужую документацию на API, чтобы не наступить на грабли

Салют! Решила еще написать пару постов на тему API и рассказать случай из практики:

Получаю как-то документацию на внешнее API — для интеграции с платёжным сервисом. Открываю Swagger, всё красиво, эндпоинты на месте. Согласовываю интеграцию, передаю в разработку.

Через две недели разработчик приходит с вопросом: “А что возвращает API если платёж завис в статусе pending дольше часа?” И тут выясняется — в документации этого нет вообще. Ни слова.

Хорошая документация — редкость. Поэтому аналитик должен уметь читать её критически, а не просто принимать как есть.


Вот на что я теперь смотрю в первую очередь:

1. Есть ли вообще схема ошибок

Если описаны только успешные ответы — это красный флаг. Спрашиваю прямо: “пришлите список всех кодов ошибок и их тела ответов”. Если в ответ тишина или “ну, обычно 400 и 500” — закладываю время на уточнения в процессе разработки. Они будут точно.

2. Что значит “опциональное” поле на самом деле

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

3. Идемпотентность — спрашиваю прямо

Если интеграция создаёт сущности — платёж, заказ, бронирование — обязательно уточняю: что при повторном запросе с теми же данными? Дубль? Та же сущность вернётся? Для платежей это критично — повторный запрос из-за обрыва сети не должен списать деньги дважды.
Если в документации об этом ни слова, это не значит что идемпотентности нет. Значит, про неё просто забыли написать. Спрашиваю у владельцев API напрямую, не додумываю сама.

4. Лимиты и троттлинг

Сколько запросов в секунду разрешено? Что происходит при превышении — 429 Too Many Requests, как и положено по спецификации? Или, как бывает на практике, сервис просто молча обрывает соединение либо отдаёт 503? Это нужно знать заранее, а не выяснять на проде в пятницу вечером.

5. Версионирование — какая версия актуальна на самом деле

Иногда документация описывает v2, а в реальности эндпоинт всё ещё на v1, потому что миграция не завершена. Смотрю дату последнего обновления документации. Если её нет — тоже звоночек.

6. Тестовая среда — её поведение реально совпадает с продом?

Самое неприятное открытие — когда на тестовом стенде всё работает идеально, а на проде логика чуть другая. Уточняю у поставщика API: гарантируется ли идентичность тестовой и боевой среды, или есть нюансы, о которых стоит знать заранее.

Документация — это обещание. Но обещания не всегда выполняют полностью. Задача аналитика — найти дыры до того, как их найдёт разработчик в проде, а не после.

🧐 Если было полезно, ставьте реакции, буду делиться больше такой информацией))

___________

Источник: @ba_and_sa

💙 BA|SA | 💬 BA|SA
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥13👍43🙈1
Всем привет! Напоминаю о нашем розыгрыше

Присоединяйтесь и получите шанс выиграть от нас подарочки))

Разыгрывать будем уже сегодня в 17:00 🙂
Please open Telegram to view this post
VIEW IN TELEGRAM
4
🎉 Результаты розыгрыша:

🏆 Победители:
1. Роман (@zkhromann)
2. AlexUnit (@AlexxUnit)
3. Tryshch (@Tryshch)

✔️Проверить результаты
Please open Telegram to view this post
VIEW IN TELEGRAM
🎉6