> 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-sposoby-vzaimodeistviya-s-api-sushestvuyut-v-chem-raznica-mezhdu-nimi.md).

# Какие способы взаимодействия с API существуют? В чем разница между ними?

Основные способы взаимодействия с API делятся по архитектурным стилям и протоколам:

***

### **1. REST API (Representational State Transfer)**

* Архитектурный стиль, работающий поверх **HTTP(S)**.
* Использует стандартные методы: `GET`, `POST`, `PUT`, `PATCH`, `DELETE`.
* Формат данных: **JSON** (иногда XML, YAML).
* Легковесный, кэшируемый, удобен для веба и мобильных приложений.
* Подходит для микросервисов.

**Пример:**

```http
GET /users/1
```

Ответ (JSON):

```json
{ "id": 1, "name": "Alex" }
```

***

### **2. SOAP (Simple Object Access Protocol)**

* Строгий протокол на основе **XML**.
* Может работать поверх HTTP, SMTP, TCP и других транспортов.
* Имеет WSDL (Web Services Description Language) для описания контрактов.
* Поддерживает WS-Security, транзакции.
* Используется в банковских и корпоративных системах, где важна стандартизация и безопасность.

***

### **3. GraphQL**

* Запросный язык и среда выполнения от Facebook.
* Клиент сам определяет, какие данные нужны.
* Один endpoint (`/graphql`) вместо множества как в REST.
* Снижает количество запросов, гибок для фронтенда.
* Но требует сложной настройки сервера и контроля производительности.

**Пример:**

```graphql
query {
  user(id: 1) {
    name
    email
  }
}
```

***

### **4. gRPC (Google Remote Procedure Call)**

* Фреймворк от Google поверх **HTTP/2**.
* Использует **Protocol Buffers (protobuf)** для сериализации данных.
* Быстрый, двусторонний стриминг, поддерживает множество языков.
* Подходит для highload и микросервисов.

***

### **5. WebSocket API**

* Постоянное **двустороннее соединение** между клиентом и сервером.
* Подходит для real-time: чаты, биржи, игры.
* Более эффективен, чем HTTP-поллинг.

***

### **6. RPC (Remote Procedure Call)**

* Концепция вызова удаленной функции «как локальной».
* gRPC — современный вариант RPC.
* Подходит для внутренних сервисов, но не всегда удобен для внешних API.

***

### **Краткая разница**

| Подход        | Формат данных | Особенности                                        |
| ------------- | ------------- | -------------------------------------------------- |
| **REST**      | JSON/XML      | Легкий, популярный, кэширование, много endpoint’ов |
| **SOAP**      | XML           | Строгий протокол, безопасность, legacy             |
| **GraphQL**   | JSON          | Клиент сам выбирает данные, один endpoint          |
| **gRPC**      | Protobuf      | Высокая скорость, двусторонний стриминг            |
| **WebSocket** | JSON/Binary   | Real-time, постоянное соединение                   |
| **RPC**       | Разный        | Вызов функций удаленно, простота в архитектуре     |
