Ответ
Структура API (Application Programming Interface) состоит из следующих ключевых компонентов, которые определяют взаимодействие между клиентом и сервером:
- Эндпоинты (Endpoints) — URL-адреса, определяющие путь к ресурсу (например,
/usersили/orders/{id}). - Методы HTTP — операции, выполняемые над ресурсами:
GET(получить),POST(создать),PUT/PATCH(обновить),DELETE(удалить). - Заголовки (Headers) — метаданные запроса и ответа, например:
Content-Type: application/json— формат передаваемых данных.Authorization: Bearer <token>— данные для аутентификации.
- Параметры — данные, передаваемые в запросе:
- Query-параметры: в URL после
?(/users?active=true). - Path-параметры: часть пути (
/users/123). - Параметры тела запроса (Body).
- Query-параметры: в URL после
- Тело запроса (Request Body) — данные, отправляемые клиентом в методах
POST,PUT,PATCH(обычно в формате JSON или XML). - Коды состояния HTTP (Status Codes) — числовые индикаторы результата запроса:
2xx— Успех (например,200 OK,201 Created).4xx— Ошибка клиента (например,400 Bad Request,404 Not Found).5xx— Ошибка сервера (например,500 Internal Server Error).
- Тело ответа (Response Body) — данные, возвращаемые сервером (чаще всего JSON).
Пример HTTP-запроса к API:
GET /api/v1/users/42 HTTP/1.1
Host: example.com
Accept: application/json
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9... Ответ 18+ 🔞
А, слушай, ну вот эта вся ваша API-хуита, она же на самом деле не такая страшная, как её рисуют! Это ж просто договорённость, как две программы друг с другом трепаться будут, чтобы не получилось как в том анекдоте: один кричит «Муму!», а второй в ответ «Чё?». Вот чтобы такого не было, есть чёткие правила, блядь.
Смотри, представь, что API — это как меню в ресторане, только для программ. И в этом меню всё разложено по полочкам:
-
Эндпоинты (Endpoints) — это, сука, сами блюда в меню. То есть конкретные адреса, куда стучаться. Хочешь пользователей —
/users, хочешь заказы —/orders/{id}. Всё просто, как три копейки. -
Методы HTTP — это то, что ты с этим блюдом хочешь сделать. Пришёл, сел, листаешь меню — это
GET(посмотреть). Нашёл, что хочешь, и крикнул официанту — этоPOST(создать заказ). Передумал, сказал «ой, лучше без лука» — этоPUTилиPATCH(обновить). А если всё, наелся, уходишь — этоDELETE(удалить, отменить). Всё логично, ёпта! -
Заголовки (Headers) — это твои особые пожелания официанту, шепчешь ему на ушко. Типа «Принеси мне это в JSON-контейнере» (
Content-Type: application/json) или «Вот мой пропуск в VIP-зону» (Authorization: Bearer <token>). Без этих штук тебя либо не поймут, либо вообще выпрут на мороз, пидарас шерстяной. -
Параметры — ну тут, блядь, вообще разнообразие. Это как уточнять детали заказа.
- Query-параметры: Ты говоришь: «Принеси мне пользователей, но только активных!» — и в адресе появляется
/users?active=true. После знака вопроса, всё видно. - Path-параметры: А это когда ты прямо в адрес вставляешь номер: «Мне нужен конкретно пользователь номер 42» —
/users/42. Сервер смотрит и такой: «А, ну этого-то я знаю». - Параметры тела (Body): А это когда ты пишешь официанту целое сочинение на салфетке — что именно создать или изменить.
- Query-параметры: Ты говоришь: «Принеси мне пользователей, но только активных!» — и в адресе появляется
-
Тело запроса (Request Body) — вот та самая салфетка с подробностями. Используется, когда ты что-то создаёшь (
POST) или меняешь (PUT/PATCH). Пишешь там обычно на JSON, реже на XML. Главное — почерк разборчивый, а то сервер обосрётся и вернёт ошибку. -
Коды состояния HTTP (Status Codes) — а это, сука, самое важное! Ответ от кухни. Официант приносит тебе бумажку с цифрой.
2xx— Всё охуенно! Заказ приняли, готовят, несут.200— «Держи, заказывал».201— «Создали твой заказ с нуля, молодец».4xx— Ты, мудак, что-то напутал.400— «Бро, ты в заявке какую-то хуйню написал, мы не поняли».404— «Такого блюда у нас нет, иди нахуй». Это твои косяки.5xx— А вот это уже пиздец на кухне.500— «У нас плита сломалась, шеф в истерике, извини». Тут уже не ты виноват, но есть всё равно не дадут.
-
Тело ответа (Response Body) — ну и наконец, само блюдо! Данные, которые тебе принесли. Обычно тоже в JSON. Если запрос был удачный — там будет то, что просил. Если нет — описание, что пошло не так.
Вот смотри, как это выглядит вживую, когда одна программа стучится к другой:
GET /api/v1/users/42 HTTP/1.1
Host: example.com
Accept: application/json
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
Перевод на человеческий: «Эй, example.com! Дай-ка мне (GET) данные пользователя под номером 42. Пришли мне их, пожалуйста, в формате JSON (Accept). И, кстати, вот мой пропускной токен, я свой (Authorization)».
И если всё хорошо, в ответ придёт что-то вроде: 200 OK и тело с JSON, где будет имя, почта и прочая хуйня этого пользователя. А если токен просроченный — получишь 401 Unauthorized и пойдёшь, блядь, авторизовываться заново. Вот и вся магия, никакой ебалы мозговой!