Работали ли вы только с одним типом сервиса (например, REST API)?

«Работали ли вы только с одним типом сервиса (например, REST API)?» — вопрос из категории Архитектура, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Нет, в современных проектах обычно приходится работать с несколькими типами сервисов и технологий интеграции.

С какими сервисами можно работать:

  • REST/HTTP API: Наиболее распространенный тип для синхронного взаимодействия. (Spring Boot, JAX-RS).
  • Message Brokers (Асинхронные): Для событийно-ориентированной архитектуры (Kafka, RabbitMQ).
  • Сервисы баз данных: Как реляционные (PostgreSQL, MySQL), так и NoSQL (MongoDB, Redis).
  • Cloud-сервисы: Специализированные сервисы от провайдеров (AWS S3, AWS Lambda, Google Pub/Sub).
  • gRPC: Для высокопроизводительного RPC-взаимодействия между сервисами.

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

@RestController
@RequestMapping("/api/payments")
public class PaymentController {

    private final PaymentService paymentService;

    @PostMapping
    public ResponseEntity<PaymentResponse> createPayment(@RequestBody @Valid PaymentRequest request) {
        PaymentResponse response = paymentService.process(request);
        return ResponseEntity.status(HttpStatus.CREATED).body(response);
    }
}

Пример консьюмера сообщений из Kafka:

@KafkaListener(topics = "payment-events")
public void handlePaymentEvent(PaymentEvent event) {
    log.info("Processing event: {}", event.getId());
    // Обработка события
}

Выбор технологии зависит от требований к пропускной способности, задержкам, согласованности данных и существующего стека.