В чем ключевые различия между архитектурными стилями REST и протоколом SOAP?

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

Ответ

REST (Representational State Transfer) — это архитектурный стиль, а не протокол. Он использует стандартные HTTP-методы (GET, POST, PUT, DELETE, PATCH) и работает с ресурсами, представленными в форматах JSON, XML, HTML и других. SOAP (Simple Object Access Protocol) — это строго стандартизированный протокол для обмена структурированными сообщениями, обычно поверх HTTP, SMTP и других.

Ключевые различия:

Критерий REST SOAP
Подход Архитектурный стиль, набор принципов. Формальный протокол со строгой спецификацией.
Формат данных Любой (JSON, XML, plain text). Только XML.
Состояние (State) Stateless (каждый запрос самодостаточен). Может поддерживать stateful-взаимодействия.
Стандарты Использует стандарты HTTP (URI, методы, коды ответов). Использует собственный стек стандартов (WSDL, WS-Security, WS-AtomicTransaction).
Производительность Легковесный, меньше накладных расходов, поддерживает кэширование. Большие накладные расходы из-за XML-обертки, сложнее кэшировать.
Безопасность Полагается на транспортный уровень (HTTPS) и стандарты (OAuth, JWT). Имеет встроенный стандарт WS-Security для безопасности на уровне сообщений.
Типичное применение Веб-API, микросервисы, мобильные приложения. Корпоративные системы, финансовые услуги, где критична надежность и безопасность.

Пример REST-контроллера (Spring Boot):

@RestController
@RequestMapping("/api/books")
public class BookController {
    @GetMapping("/{id}")
    public ResponseEntity<Book> getBook(@PathVariable Long id) {
        Book book = service.findById(id);
        return ResponseEntity.ok(book); // Использует стандартный HTTP-статус 200 OK
    }
}

Пример SOAP-сервиса (JAX-WS):

@WebService
public class BookService {
    @WebMethod
    public Book getBook(Long id) {
        // Логика получения книги
        return book;
    }
}
// Описание сервиса публикуется в WSDL-файле.

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