Какие протоколы и архитектурные подходы, работающие поверх HTTP, вы знаете?

Ответ

Важно различать протоколы, которые используют HTTP как транспорт, и архитектурные стили, которые определяют, как с помощью HTTP взаимодействовать.

Архитектурные стили и подходы:

  • REST (Representational State Transfer) — это не протокол, а архитектурный стиль для построения распределенных систем. Он использует стандартные методы HTTP (GET, POST, PUT, DELETE) для операций над ресурсами, идентифицируемыми по URI.

    // Пример GET-запроса к REST API
    resp, err := http.Get("https://api.example.com/users/123")
  • GraphQL — это язык запросов для API и среда выполнения для обработки этих запросов. Позволяет клиенту запрашивать строго определенный набор данных в одном запросе, решая проблему избыточной или недостаточной выборки данных, характерную для REST.

    // Пример GraphQL-запроса
    query GetUser {
      user(id: "1") {
        name
        email
      }
    }

Протоколы:

  • WebSocket — протокол, работающий поверх TCP, который обеспечивает постоянное двунаправленное соединение между клиентом и сервером. Изначальный handshake (рукопожатие) происходит по HTTP/1.1 с помощью заголовка Upgrade, после чего соединение "повышается" до WebSocket.

    // Пример подключения по WebSocket
    conn, _, err := websocket.DefaultDialer.Dial("ws://example.com/ws", nil)
  • gRPC — высокопроизводительный RPC-фреймворк от Google. Использует HTTP/2 в качестве транспорта и Protocol Buffers для сериализации данных. Обеспечивает строгую типизацию, потоковую передачу данных и высокую эффективность.

    // Пример подключения клиента gRPC
    conn, err := grpc.Dial("localhost:50051", grpc.WithInsecure())
  • WebDAV (Web Distributed Authoring and Versioning) — набор расширений к протоколу HTTP, который позволяет пользователям совместно редактировать и управлять файлами на удаленных веб-серверах.