Был ли ваш последний проект RESTful-сервисом?

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

Ответ

Да, проект был RESTful-сервисом на Spring Boot, соответствующим ключевым принципам REST.

Реализованные принципы:

  1. Единообразие интерфейса: Использование стандартных HTTP-методов.
    • GET — получение ресурса.
    • POST — создание.
    • PUT — полное обновление.
    • DELETE — удаление.
  2. Статус-коды: Корректные HTTP-ответы (200 OK, 201 Created, 404 Not Found, 400 Bad Request).
  3. Ресурсо-ориентированность: URL представляют сущности (например, /api/users).
  4. Передача состояния (HATEOAS): В ответы включались ссылки на связанные действия.

Пример контроллера:

@RestController
@RequestMapping("/api/users")
public class UserController {

    @GetMapping("/{id}")
    public ResponseEntity<UserResponse> getUser(@PathVariable Long id) {
        UserResponse user = userService.findById(id);
        return ResponseEntity.ok(user); // 200 OK
    }

    @PostMapping
    public ResponseEntity<UserResponse> createUser(@Valid @RequestBody CreateUserRequest request) {
        UserResponse newUser = userService.create(request);
        URI location = ServletUriComponentsBuilder
                .fromCurrentRequest()
                .path("/{id}")
                .buildAndExpand(newUser.getId()).toUri();
        return ResponseEntity.created(location).body(newUser); // 201 Created
    }
}

Дополнительно:

  • Формат данных: JSON для запросов и ответов.
  • Аутентификация: JWT-токены, передаваемые в заголовке Authorization: Bearer <token>.
  • Документация: OpenAPI (Swagger) для описания API.