Ответ
REST API используют стандартные HTTP-заголовки, такие как Content-Type и Accept, для указания формата передаваемых и ожидаемых данных. Основные форматы:
1. JSON (application/json) – стандарт де-факто
- Преимущества: Легковесный, удобочитаемый для человека, легко парсится в JavaScript и большинстве других языков.
- Пример тела запроса/ответа:
{ "userId": 12345, "name": "John Doe", "email": "john@example.com", "active": true, "roles": ["user", "admin"] }
2. XML (application/xml, text/xml) – legacy и корпоративные системы
- Преимущества: Строгая структура, поддержка пространств имен и схем (XSD).
- Пример:
<user> <id>12345</id> <name>John Doe</name> <email>john@example.com</email> </user>
3. Другие форматы (менее распространенные):
- Form Data (application/x-www-form-urlencoded): Для отправки данных из HTML-форм.
- Multipart Form Data (multipart/form-data): Для загрузки файлов.
- Plain Text (text/plain): Для простого текста.
- YAML (application/yaml): Для конфигураций.
- Бинарные протоколы (например, Protocol Buffers - application/protobuf): Для высокой производительности в микросервисных архитектурах.
Практическое использование в HTTP:
# Запрос с указанием формата тела и ожидаемого ответа
POST /api/users HTTP/1.1
Host: api.example.com
Content-Type: application/json
Accept: application/json
{"name": "Alice"} Ответ 18+ 🔞
Давай разберём эту всю хуйню с форматами данных в REST API, а то некоторые до сих пор думают, что XML — это круто, как будто мы в двухтысячных застряли.
Смотри, вся суть в этих ваших HTTP-заголовках, Content-Type и Accept. Это как сказать серверу: «Слушай, я тебе сейчас вот эту хрень в таком-то виде суну, а ты мне, будь добр, ответь в таком-то». Без них — пиздец, мрак и непонимание, сервер тебя просто не поймёт, будет как Герасим немой: «Му-му?».
1. JSON (application/json) – царь и бог, стандарт де-факто
Ну, тут всё ясно, как божий день. Лёгкий, читаемый, для человека понятный, для машин — вообще огонь. Вся современная разработка на нём сидит.
- Что хорошего: Весит мало, глаза не ебёт, в JavaScript парсится одной левой, да и в других языках поддержка — овердохуищная.
- Как выглядит эта красота:
{ "userId": 12345, "name": "John Doe", "email": "john@example.com", "active": true, "roles": ["user", "admin"] }Красота, да? Всё на своих местах, никакой лишней хуйни.
2. XML (application/xml, text/xml) – наследие ужаса, корпоративный ад
Этот формат — как старый дед на лавочке, который всё рассказывает, как было при царе Горохе. Строгий, раздутый, с кучей лишних тегов. Живёт в легаси-системах и всяких конторах, где «так принято».
- Зачем он нужен: Ну, там строгая структура, схемы эти ваши XSD, пространства имён… В общем, бюрократия в мире данных.
- Пример этой простыни:
<user> <id>12345</id> <name>John Doe</name> <email>john@example.com</email> </user>Видишь, сколько букв для трёх полей? Ёпта, один opening и closing tag чего стоят! Но куда деваться, если заказчик — банк двадцатилетней давности.
3. Прочая нечисть (используется реже, но знать надо)
- Form Data (
application/x-www-form-urlencoded): Старая добрая отправка данных из HTML-форм.name=Alice&age=30. Скучно, но работает. - Multipart Form Data (
multipart/form-data): Когда нужно файлы отправить. Вот тут он незаменим, царь ему в руки. - Plain Text (
text/plain): Ну… просто текст. Для каких-нибудь заметочек. - YAML (
application/yaml): Для конфигов всяких. Читается легко, но в API его редко встретишь. - Бинарные протоколы (типа
application/protobuf): Вот это уже серьёзно. Для микросервисов, где скорость и размер — святое. Нечитаемо для человека, зато летает.
А на практике это выглядит вот так, смотри:
# Запрос, где мы всё по-взрослому указываем
POST /api/users HTTP/1.1
Host: api.example.com
Content-Type: application/json # «Братан, я тебе JSON шлю»
Accept: application/json # «И ответ мне, пожалуйста, тоже в JSON, а не в XML, а то я с ума сойду»
{"name": "Alice"} # Само тело запроса
Вот и вся магия. Главное — не перепутать заголовки, а то получишь в ответ либо ошибку, либо какую-нибудь хуйню в неожиданном формате, которую потом полдня парсишь.