> For the complete documentation index, see [llms.txt](https://kaze.gitbook.io/qa-theory/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://kaze.gitbook.io/qa-theory/web/kakie-znaete-formaty-peredachi-dannykh.md).

# Какие знаете форматы передачи данных?

Форматы передачи данных — это способы структурирования и кодирования информации для передачи между системами. Основные:

***

### 1️⃣ Текстовые форматы

1. **JSON (JavaScript Object Notation)**

* Очень популярный для API.
* Пример:

```json
{
  "id": 1,
  "name": "John",
  "active": true
}
```

* Плюсы: читаемый, поддержка всех современных языков, легко парсить.
* Минусы: большие объёмы при сложной структуре, нет бинарной оптимизации.

2. **XML (eXtensible Markup Language)**

* Использовался раньше для SOAP и старых API.
* Пример:

```xml
<user>
  <id>1</id>
  <name>John</name>
  <active>true</active>
</user>
```

* Плюсы: строгая структура, поддержка схем (XSD).
* Минусы: более тяжеловесный, сложнее парсить, меньше популярность в новых API.

3. **YAML (YAML Ain’t Markup Language)**

* Читаемый для человека, часто для конфигураций.
* Пример:

```yaml
id: 1
name: John
active: true
```

* Минусы: чувствителен к отступам, меньше стандартов.

***

### 2️⃣ Бинарные форматы

1. **Protocol Buffers (Protobuf)**

* Разработан Google.
* Быстрее и компактнее JSON, но требует схемы.
* Пример схемы:

```proto
message User {
  int32 id = 1;
  string name = 2;
  bool active = 3;
}
```

2. **MessagePack**

* Сериализация данных в бинарный формат.
* Совместим с JSON, но более компактный.

3. **Avro**

* Используется в больших данных (Hadoop, Kafka).
* Поддерживает схему, компактный и быстрый.

***

### 3️⃣ Специальные форматы

1. **Form-data / x-www-form-urlencoded**

* Используется в HTTP POST-запросах для передачи формы.
* Пример:

```
name=John&age=30
```

* Применяется для загрузки файлов и простых форм.

2. **CSV (Comma-Separated Values)**

* Табличные данные.
* Пример:

```
id,name,active
1,John,true
```

* Легко импортировать в Excel, базы данных.

***

### 4️⃣ Когда что использовать

* API между сервисами: **JSON** (обычно) или **Protobuf** (для микросервисов с высокой нагрузкой).
* Старые SOAP-сервисы: **XML**.
* Конфигурации и человеко-читаемые файлы: **YAML**.
* Табличные данные: **CSV**.
