Что такое API и для чего он нужен
Что проверяют
Для фронтендера вопрос не про учебное определение, а про то, понимаете ли вы, что работаете сразу с несколькими API: браузера, сервера и библиотек. Следом обычно спрашивают, чем REST отличается от GraphQL, как вы обрабатываете ошибки запроса и что такое CORS.
Как отвечать
API это контракт: какие операции доступны, в каком формате передаются данные и возвращается результат, какие бывают ошибки. Реализация за контрактом скрыта и может меняться, пока контракт соблюдён. Во фронтенде таких контрактов три слоя:
- Web API браузера:
fetch,localStorage,IntersectionObserver, History API, сам DOM. Это не часть языка JavaScript, их предоставляет среда, поэтому набор зависит от неё: DOM есть в браузере и отсутствует в Node.js; - HTTP API сервера: REST с ресурсами, методами
GET,POST,PUT,PATCH,DELETEи кодами ответа; GraphQL с одним эндпоинтом, где клиент сам выбирает поля; WebSocket и Server-Sent Events для потоковых данных; - API кода: пропсы React-компонента или сигнатура хука тоже контракт, который читают коллеги.
На практике это нужно, чтобы фронт и бэк договорились о контракте и работали параллельно. Описание в OpenAPI позволяет сгенерировать типы TypeScript, а пока бэкенд не готов, ответы подменяют моками через MSW.
Где спотыкаются
Сводят API к «REST, который отдаёт JSON», и теряются, когда их просят назвать браузерные API.
Не знают, как fetch ведёт себя с ошибками. Промис отклоняется только при сетевом сбое, а ответ 404 или 500 приходит как успешный, поэтому проверять нужно response.ok. Таймаута по умолчанию нет, его задают через AbortSignal.timeout().
Считают CORS защитой сервера и пытаются «починить» его на клиенте, например через mode: 'no-cors'. CORS это ограничение браузера, а такой режим возвращает непрозрачный ответ, который нельзя прочитать. Рядом та же путаница: секретный ключ стороннего API кладут в переменную VITE_ или NEXT_PUBLIC_, и он оказывается в бандле у каждого посетителя.