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

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

***

### 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**.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://kaze.gitbook.io/qa-theory/web/kakie-znaete-formaty-peredachi-dannykh.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
