Использовался ли REST API в вашем последнем проекте?

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

Ответ

Да, REST был основным стилем проектирования API для взаимодействия между клиентскими приложениями (frontend, мобильные) и бэкенд-сервисами, а также иногда между самими сервисами.

Реализация на Spring Boot:

@RestController
@RequestMapping("/api/v1/users") // Базовый путь и версионирование
public class UserController {

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

    @PostMapping
    public ResponseEntity<UserResponse> createUser(@Valid @RequestBody CreateUserRequest request) {
        UserResponse newUser = userService.createUser(request);
        // Возвращаем созданный ресурс и ссылку на него
        URI location = ServletUriComponentsBuilder
                        .fromCurrentRequest()
                        .path("/{id}")
                        .buildAndExpand(newUser.getId())
                        .toUri();
        return ResponseEntity.created(location).body(newUser); // HTTP 201 Created
    }

    @PutMapping("/{id}")
    public ResponseEntity<UserResponse> updateUser(@PathVariable Long id, 
                                                   @RequestBody UpdateUserRequest request) {
        // ... логика обновления
    }

    @DeleteMapping("/{id}")
    public ResponseEntity<Void> deleteUser(@PathVariable Long id) {
        userService.deleteUser(id);
        return ResponseEntity.noContent().build(); // HTTP 204 No Content
    }
}

Ключевые принципы, которые соблюдались:

  • Единообразие интерфейса: Использование стандартных HTTP-методов (GET, POST, PUT, DELETE, PATCH).
  • Статус-коды: Корректные HTTP-статусы (200, 201, 204, 400, 404, 500).
  • Ресурсо-ориентированность: URL представляют собой ресурсы (/users, /orders).
  • Формат данных: Обмен данными в формате JSON.
  • Идемпотентность и безопасность: GET — безопасен, PUT, DELETE — идемпотентны.

Документирование: Для описания API использовался OpenAPI (Swagger), что автоматически генерировало интерактивную документацию.