Может ли REST API работать по HTTP/3?

Ответ

Да, безусловно. REST как архитектурный стиль не зависит от версии протокола HTTP. Все семантические элементы, на которые опирается REST (методы, заголовки, статус-коды, тело сообщения), полностью сохраняются в HTTP/3.

Основное отличие HTTP/3 от предыдущих версий — это использование протокола QUIC поверх UDP вместо TCP. Это решает проблему блокировки "head-of-line" на уровне TCP и ускоряет установку соединения.

Для REST API это означает, что те же самые запросы будут работать, но потенциально с меньшей задержкой и большей производительностью, особенно в нестабильных сетях.

Пример сервера на Go с поддержкой HTTP/3:

Стандартная библиотека Go (net/http) пока не поддерживает HTTP/3 нативно. Для этого используются сторонние библиотеки, например quic-go.

package main

import (
    "fmt"
    "net/http"

    "github.com/quic-go/quic-go/http3"
)

func main() {
    // Обработчик такой же, как и для обычного HTTP сервера
    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
        fmt.Fprintf(w, "Hello, this is a RESTful response over HTTP/3!")
    })

    // Запускаем сервер HTTP/3 на порту 443 (требует TLS)
    // Для этого нужны файлы сертификата (cert.pem) и ключа (key.pem)
    err := http3.ListenAndServe(":443", "cert.pem", "key.pem", nil)
    if err != nil {
        fmt.Println("Error starting server:", err)
    }
}

Ключевые моменты:

  • Для приложения логика обработки REST запросов не меняется.
  • Переход на HTTP/3 — это улучшение на транспортном уровне, не затрагивающее архитектуру самого API.
  • Требуется поддержка HTTP/3 как на сервере, так и на клиенте (например, в современных браузерах она уже есть).