apis
API
Как программы общаются друг с другом по сети — основные стили (REST, GraphQL, gRPC) и как спроектировать такой интерфейс, чтобы им было удобно пользоваться и при изменениях.
Начать трек →С нуля
Перед senior-материалом: что вообще такое API и горстка слов, которые остальной трек считает уже знакомыми.Rest modeling
Моделирование REST-ресурсов: существительные, нужные клиенту, а не твои глаголы и таблицы
REST API — это модель ресурсов, важных клиенту. Два провала, которые бьют в проде: превращать действия в…
Status codes real
Статус-коды, которые реально важны в проде
Статус-код — это контракт, который читают три машины раньше любого человека: кэши, дашборды и логика ретраев. Ошибиться…
Pagination
Пагинация на масштабе: почему OFFSET умирает, а keyset-курсоры живут
OFFSET заставляет базу просканировать и выбросить каждую строку до твоей страницы, поэтому глубокие страницы тормозят…
Openapi
OpenAPI: сделать контракт источником истины, а не доками
OpenAPI окупается, только когда спеку проверяют — генерируют клиентов, валидируют запросы и роняют CI на ломающем…
Grpc protobuf
gRPC и Protobuf: бинарный контракт и его цена
gRPC меняет человекочитаемый JSON на бинарный формат, привязанный к схеме: он в 4-10 раз быстрее и заметно компактнее,…
GraphQL N+1 и цена вложенных резолверов
Почему один GraphQL-запрос превращается в 1000 SQL-вызовов, как DataLoader чинит это за один тик event loop, и какие complexity / depth / persisted-query барьеры удерживают публичные API в живых.Rate limiting
Rate limiting: алгоритмы, всплеск на границе и счётчик в Redis
Fixed window дёшев, но пропускает 2x-всплеск на границе окна; token bucket его сглаживает. Главный продакшен-урок:…
Putting it together
Проектирование и ревью публичного API от начала до конца
Каждое решение в API связано: плохое моделирование ресурсов вынуждает злоупотреблять статус-кодами, из-за чего клиенты…
Проекты по этому треку
Guided-проекты, которые закрепляют изученное здесь.
Сервис фич-флагов
Собери небольшой сервис флагов с правилами таргетинга, процентными раскатками и типизированным SDK, который вычисляет флаги на клиенте из закешированного набора правил.
Мини-CRUD API
Собери свой первый настоящий бэкенд: крошечный HTTP API, который создаёт, читает, обновляет и удаляет заметки — на SQLite, чтобы данные пережили перезапуск. Ты пройдёшь путь от сервера в одну строку с «hello» до небольшого сервиса, который проверяет ввод и хранит строки, — честно, шаг за шагом.
Мини OAuth 2.0 + PKCE логин
Реализуй поток authorization-code + PKCE целиком против реального провайдера, чтобы понять каждый редирект и токен, а не доверять библиотеке.
Загрузка через presigned URL
Прямая загрузка в хранилище через presigned URL с ограничениями размера и content-type и webhook завершения, проверяющим, что объект действительно прибыл, — чтобы API-сервер никогда не касался байт файлов.
Распределённый rate limiter
Собери token-bucket лимитер, который держится поперёк многих инстансов приложения за счёт счётчика в Redis, а не в памяти процесса.
Todo CRUD на SQLite
Твой второй бэкенд: API для todos, где задачи живут в SQLite, а не в памяти — так они переживают перезапуск, и ты узнаёшь реальную цену хранения.
Типобезопасный SDK для API
Собери клиент, которому другие инженеры действительно будут доверять: типизированный SDK поверх настоящего HTTP API, где неправильное поле, пропущенный вариант и ответ, соврамший о своей форме, ловит компилятор — а не падение в проде. Ты смоделируешь домен через размеченные объединения и дженерики, проверишь каждый ответ на границе и дашь выводу типов донести точные типы до места вызова, не оставив ни одного `any`, которым прикрывают дыры.
URL-сокращатель под нагрузкой
Собери URL-сокращатель, который выдерживает настоящий трафик, — а потом эксплуатируй его: задеплой, наблюдай и разберись с инцидентом, когда одна горячая ссылка плавит твой кэш.
Базы данных
Как базы данных хранят и быстро находят данные, сохраняют их целостность, когда пишут сразу много пользователей, и растут вместе с объёмом.