Какие форматы данных (MIME-типы) обычно используются в REST API для обмена информацией?

Ответ

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"}  # Само тело запроса

Вот и вся магия. Главное — не перепутать заголовки, а то получишь в ответ либо ошибку, либо какую-нибудь хуйню в неожиданном формате, которую потом полдня парсишь.