Как написать REST API на Java за 30 минут: пошаговое руководство
Создание REST API — один из ключевых навыков современного Java-разработчика. REST (Representational State Transfer) позволяет строить легковесные, масштабируемые и понятные веб-сервисы. В этом руководстве мы за 30 минут создадим полноценный REST API с помощью Spring Boot. Вы научитесь настраивать проект, создавать эндпоинты для работы с пользователями, обрабатывать JSON и тестировать API через Postman или браузер.
1. Что такое REST API и зачем он нужен?
REST API — это архитектурный стиль, при котором клиент и сервер обмениваются данными через HTTP-запросы. Основные принципы REST:
- Ресурсы — каждый объект (пользователь, товар, заказ) представлен URL-адресом.
- HTTP-методы — GET (чтение), POST (создание), PUT (обновление), DELETE (удаление).
- Stateless — каждый запрос содержит всю необходимую информацию; сервер не хранит состояние сессии.
- Форматы данных — чаще всего JSON или XML.
REST API используется в мобильных приложениях, веб-фронтендах, микросервисах и интеграции систем. На Java самым популярным фреймворком для создания REST API является Spring Boot — он предоставляет готовые аннотации и автоматическую конфигурацию.
2. Подготовка проекта Spring Boot
Для начала вам понадобится:
- JDK 17 или выше
- IntelliJ IDEA или любой другой IDE
- Maven или Gradle
Создадим проект с помощью Spring Initializr. Выберите:
- Project: Maven
- Language: Java
- Spring Boot: 3.2.0 (или последняя стабильная)
- Dependencies: Spring Web, Spring Boot DevTools
Нажмите "Generate" и распакуйте архив. Откройте проект в IDE. Структура будет выглядеть так:
rest-api-demo/
├── src/main/java/com/example/restapidemo/
│ ├── RestApiDemoApplication.java
│ └── controller/
│ └── UserController.java
├── src/main/resources/
│ └── application.properties
└── pom.xml
3. Создание модели данных и контроллера
Создадим простую модель User (класс в пакете model):
package com.example.restapidemo.model;
public class User {
private Long id;
private String name;
private String email;
public User() {}
public User(Long id, String name, String email) {
this.id = id;
this.name = name;
this.email = email;
}
// Геттеры и сеттеры
public Long getId() { return id; }
public void setId(Long id) { this.id = id; }
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public String getEmail() { return email; }
public void setEmail(String email) { this.email = email; }
}
Теперь создадим контроллер UserController в пакете controller. Это сердце нашего API:
package com.example.restapidemo.controller;
import com.example.restapidemo.model.User;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.atomic.AtomicLong;
@RestController
@RequestMapping("/api/users")
public class UserController {
private final List<User> users = new ArrayList<>();
private final AtomicLong counter = new AtomicLong();
public UserController() {
// Тестовые данные
users.add(new User(counter.incrementAndGet(), "Alice", "alice@example.com"));
users.add(new User(counter.incrementAndGet(), "Bob", "bob@example.com"));
}
// GET /api/users — получить всех пользователей
@GetMapping
public List<User> getAllUsers() {
return users;
}
// GET /api/users/{id} — получить пользователя по ID
@GetMapping("/{id}")
public User getUserById(@PathVariable Long id) {
return users.stream()
.filter(user -> user.getId().equals(id))
.findFirst()
.orElseThrow(() -> new RuntimeException("User not found with id: " + id));
}
// POST /api/users — создать нового пользователя
@PostMapping
public User createUser(@RequestBody User user) {
user.setId(counter.incrementAndGet());
users.add(user);
return user;
}
// PUT /api/users/{id} — обновить пользователя
@PutMapping("/{id}")
public User updateUser(@PathVariable Long id, @RequestBody User updatedUser) {
User user = getUserById(id);
user.setName(updatedUser.getName());
user.setEmail(updatedUser.getEmail());
return user;
}
// DELETE /api/users/{id} — удалить пользователя
@DeleteMapping("/{id}")
public String deleteUser(@PathVariable Long id) {
User user = getUserById(id);
users.remove(user);
return "User with id " + id + " deleted successfully";
}
}
Обратите внимание на аннотации:
@RestController— указывает, что класс обрабатывает REST-запросы.@RequestMapping("/api/users")— базовый URL для всех методов.@GetMapping,@PostMapping,@PutMapping,@DeleteMapping— маппинг HTTP-методов.@PathVariable— извлекает значение из URL.@RequestBody— преобразует JSON из тела запроса в объект Java.
4. Запуск и тестирование API
В файле application.properties можно указать порт (по умолчанию 8080):
server.port=8080
Запустите приложение: в IDE нажмите Run на классе RestApiDemoApplication. Через несколько секунд сервер запустится. Теперь протестируем API.
С помощью браузера или curl:
- GET
http://localhost:8080/api/users— вернёт список пользователей в JSON. - GET
http://localhost:8080/api/users/1— вернёт пользователя с id=1.
С помощью Postman:
- POST
http://localhost:8080/api/usersс телом{"name": "Charlie", "email": "charlie@example.com"}— создаст нового пользователя.