Какие протоколы и архитектурные подходы, работающие поверх 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, который позволяет пользователям совместно редактировать и управлять файлами на удаленных веб-серверах.

Ответ 18+ 🔞

Да ты посмотри, какая тут, блядь, путаница творится! Люди путают, что есть протокол, а что — просто стиль, как мода, блядь. Сейчас разберём, а то голова кругом идёт.

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

  • REST (Representational State Transfer) — это тебе не протокол, ёпта! Это как архитектурный стиль, понимаешь? Принципы, блядь. Как строить систему, чтобы она не развалилась, как старый сарай. Использует он обычные HTTP-команды (GET, POST, PUT, DELETE), чтобы тыкать в ресурсы по их адресам (URI).

    // Пример GET-запроса к REST API
    resp, err := http.Get("https://api.example.com/users/123")

    Всё просто: дай (GET), положи (POST), обнови (PUT), удали (DELETE). Красота, блядь!

  • GraphQL — а это, сука, вообще язык запросов! Не протокол, а язык, как английский, только для данных. Клиент сам говорит, что ему надо, одним махом. Не то что в REST: запросил пользователя — получил всю его родословную, включая тёщу и собаку. А тут — только имя и почту, если надо.

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

    Удобно, ёпта! Ничего лишнего.

А вот это уже протоколы, реальные, блядь, железные:

  • WebSocket — вот это да, протокол! Сидит поверх TCP, как блоха на собаке, и создаёт постоянную двустороннюю трубу между клиентом и сервером. Сначала стучится по HTTP: «Пустите, я свой!», а потом — хоп! — и соединение превращается в WebSocket. И пошла писать губерния, данные туда-сюда летят.

    // Пример подключения по WebSocket
    conn, _, err := websocket.DefaultDialer.Dial("ws://example.com/ws", nil)

    Живой канал, блядь, не то что эти одноразовые запросы!

  • gRPC — это, сука, монстр производительности от Гугла! RPC-фреймворк, который использует HTTP/2 как транспорт, а данные жмёт в Protocol Buffers. Всё строго типизировано, можно потоки гнать — красота, да и только. Эффективность — овердохуища.

    // Пример подключения клиента gRPC
    conn, err := grpc.Dial("localhost:50051", grpc.WithInsecure())

    Серьёзная тема для серьёзных пацанов, а не для школьных поделок.

  • WebDAV (Web Distributed Authoring and Versioning) — а это, блядь, такие довески к HTTP, чтобы можно было удалённо файлами рулить, как на своей флешке. Создавать, удалять, копировать — в общем, сетевая файловая система через HTTP. Удобная штука, если знать, как ей пользоваться, а не просто тыкать, как мартышка в клавиатуру.

Вот и вся разница, блядь. Стиль — это как идея, а протокол — это уже конкретная железная дорога, по которой данные едут. Не путай, а то получишь пизды от системы, которая не понимает твои кривые запросы!