Ответ
При разработке бэкенда используются различные протоколы и стандарты, каждый для своих задач. Важно различать транспортные протоколы и архитектурные стили/стандарты API.
Основные протоколы:
- HTTP/HTTPS (HyperText Transfer Protocol/Secure): Основа веба. Работает по модели «запрос-ответ». Используется для большинства веб-сервисов и REST API.
- HTTP/1.1: Классическая версия.
- HTTP/2: Улучшенная версия с мультиплексированием запросов, что повышает производительность.
- HTTP/3: Новейшая версия, работающая поверх протокола QUIC для еще меньших задержек.
- WebSocket: Протокол для установления постоянного двустороннего соединения между клиентом и сервером. Идеален для real-time приложений: чатов, онлайн-игр, биржевых котировок.
Архитектурные стили и фреймворки API:
- REST (Representational State Transfer): Архитектурный стиль, а не протокол. Обычно работает поверх HTTP. Использует стандартные HTTP-методы (
GET,POST,PUT,DELETE) для работы с ресурсами. - gRPC (Google Remote Procedure Call): Высокопроизводительный фреймворк для удаленного вызова процедур от Google. Работает поверх HTTP/2 и использует Protocol Buffers для сериализации данных. Отлично подходит для коммуникации между микросервисами.
- GraphQL: Язык запросов для API. Позволяет клиенту запрашивать только те данные, которые ему нужны, и получать их одним запросом. Работает поверх HTTP.
Пример простого HTTP-сервера на Go:
package main
import (
"fmt"
"log"
"net/http"
)
// handler обрабатывает входящие HTTP-запросы.
func handler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hello, World!")
}
func main() {
http.HandleFunc("/", handler)
log.Println("Starting server on :8080")
if err := http.ListenAndServe(":8080", nil); err != nil {
log.Fatal(err)
}
} Ответ 18+ 🔞
Давай разберёмся, что у нас тут за протоколы понапиханы, а то иногда кажется, что это не бэкенд, а ёперный театр какой-то, где все друг на друга кричат на разных языках. Каждый для своих делишек, понимаешь?
Протоколы, блядь, транспортные:
- HTTP/HTTPS (HyperText Transfer Protocol/Secure): Ну, это как наш фундамент, основа основ, на которой всё держится. Работает по принципу «спросил-ответили». Практически всё, что ты в браузере видишь, и большинство API на нём же и сидит.
- HTTP/1.1: Старый добрый дед, классика жанра.
- HTTP/2: Уже пошустрее, умный такой. Умеет несколько запросов в одну трубу пихать, чтобы быстрее было. Производительность, мать её, повышает.
- HTTP/3: Совсем новенький, хипстер. Вообще на QUIC пересел, чтобы задержки ещё меньше были. Будущее, блядь, вот оно.
- WebSocket: А это уже для болтовни в реальном времени. Не «спросил-ответили», а установил соединение и давай трепаться без остановки. Чисто для чатов, онлайн-игр или чтобы биржевые графики вживую показывать. Без него — никуда.
А теперь про стили API, тут вообще цирк:
- REST (Representational State Transfer): Это не протокол даже, а такая архитектурная философия, блядь. Обычно на HTTP ездит. Всё у него — ресурсы. Хочешь получить?
GET. Создать?POST. Обновить?PUTилиPATCH. Удалить? Ну,DELETE, ясень пень. Всё чинно-благородно. - gRPC (Google Remote Procedure Call): Вот это уже тяжёлая артиллерия от Гугла. Высокопроизводительная штука для общения между сервисами, особенно когда их, этих микросервисов, овердохуища. Работает на HTTP/2, а данные сжимает в бинарный формат (Protocol Buffers). Быстрее пареной репы, но и заморочек больше.
- GraphQL: А это вообще хитрая жопа. Язык запросов. Клиент сам решает, какие поля данных ему нужны, и получает всё одним махом, а не десятью запросами, как при REST. Удобно, но серверу под него подстраиваться надо — не каждый захочет.
Ну и куда же без примера кода, чтобы не быть голословным? Смотри, простейший сервак на Go:
package main
import (
"fmt"
"log"
"net/http"
)
// handler обрабатывает входящие HTTP-запросы.
func handler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hello, World!")
}
func main() {
http.HandleFunc("/", handler)
log.Println("Starting server on :8080")
if err := http.ListenAndServe(":8080", nil); err != nil {
log.Fatal(err)
}
}
Вот так вот, в двух словах. Главное — не путать, что для чего, а то получится каша, в рот меня чих-пых.