Какие способы работы с API вы знаете?

«Какие способы работы с API вы знаете?» — вопрос из категории Сети, который задают на 24% собеседований PHP Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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

1. REST (Representational State Transfer)

  • Использует стандартные HTTP-методы: GET (получить), POST (создать), PUT/PATCH (обновить), DELETE (удалить).
  • Ресурсы идентифицируются через URL (например, /api/users/123).
  • Пример запроса на Python с requests:
    import requests
    # Получение данных
    response = requests.get('https://api.example.com/users/1')
    user_data = response.json()
    # Создание данных
    new_user = {'name': 'John', 'email': 'john@example.com'}
    requests.post('https://api.example.com/users', json=new_user)

2. GraphQL

  • Позволяет клиенту запрашивать именно те поля, которые ему нужны, в одном запросе, избегая проблемы недополучения или переполучения данных (over-fetching/under-fetching).
  • Пример запроса:
    query {
      user(id: "1") {
        name
        email
        posts {
          title
        }
      }
    }

3. gRPC (gRPC Remote Procedure Calls)

  • Высокопроизводительный RPC-фреймворк от Google, использующий HTTP/2 и Protocol Buffers (бинарный формат) для сериализации.
  • Идеален для микросервисной архитектуры, где важна скорость и эффективность связи.
  • Пример: Определение сервиса в .proto-файле и генерация клиентского/серверного кода.

4. WebSocket

  • Протокол для полноценного двустороннего взаимодействия по одному TCP-соединению.
  • Используется для real-time приложений: чаты, уведомления, live-дашборды.
  • Пример на Node.js с библиотекой ws:
    const WebSocket = require('ws');
    const ws = new WebSocket('wss://echo.websocket.org');
    ws.on('open', function open() {
      ws.send('Hello Server!');
    });
    ws.on('message', function incoming(data) {
      console.log('Received: %s', data);
    });

Выбор зависит от задачи: REST для простых CRUD, GraphQL для сложных клиентов с меняющимися требованиями к данным, gRPC для внутренней high-load коммуникации, WebSocket для real-time.