Какие основные протоколы взаимодействия веб-сервисов вы знаете?

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

Ответ

1. REST (Representational State Transfer) Архитектурный стиль, использующий стандартные HTTP-методы (GET, POST, PUT, DELETE) и форматы данных (JSON, XML). Ресурсы идентифицируются URL.

// Пример Spring Boot REST-контроллера
@RestController
@RequestMapping("/api/books")
public class BookController {
    @GetMapping("/{id}")
    public Book getBook(@PathVariable Long id) {
        return bookService.findById(id);
    }
}

2. SOAP (Simple Object Access Protocol) Протокол на основе XML с жесткой спецификацией (WSDL). Обеспечивает высокую стандартизацию и безопасность, но более «тяжелый». 3. GraphQL Язык запросов, позволяющий клиенту точно указать, какие данные и в какой форме ему нужны. Решает проблемы over-fetching и under-fetching REST.

# Пример запроса GraphQL
query {
  user(id: 1) {
    name
    email
    posts(limit: 5) {
      title
    }
  }
}

4. gRPC (gRPC Remote Procedure Calls) Высокопроизводительный RPC-фреймворк от Google. Использует бинарный протокол Protocol Buffers (protobuf) для сериализации и HTTP/2 для транспорта.

// Пример proto-файла
service UserService {
  rpc GetUser (GetUserRequest) returns (UserResponse);
}
message GetUserRequest {
  int32 user_id = 1;
}

5. WebSocket Протокол для установки постоянного двустороннего (full-duplex) соединения между клиентом и сервером, идеален для real-time приложений (чаты, уведомления).