Как написать REST API на Java за 30 минут: пошаговое руководство

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Введение: REST API — это проще, чем кажется

Многие начинающие разработчики считают, что написание REST API на Java — это сложная задача, требующая глубоких знаний и долгих часов работы. На самом деле, с современными инструментами, такими как Spring Boot, вы можете создать полноценный RESTful сервис буквально за 30 минут. В этой статье мы на практике разберем, как написать REST API на Java, используя минимальный набор инструментов. Вы получите готовый шаблон, который сможете адаптировать под свои проекты.

REST (Representational State Transfer) — это архитектурный стиль, который позволяет клиентам и серверам обмениваться данными через HTTP. Мы создадим простое API для управления списком задач (To-Do). К концу статьи у вас будет работающий сервер, который умеет создавать, читать, обновлять и удалять задачи (CRUD).

Шаг 1: Подготовка окружения и создание проекта

Для начала нам понадобятся:

  • Java Development Kit (JDK) версии 17 или выше.
  • IntelliJ IDEA (Community Edition) или любая другая IDE.
  • Maven для управления зависимостями.
  • Postman или браузер для тестирования.

Создадим проект с помощью Spring Initializr (start.spring.io). Выберите следующие настройки:

  • Project: Maven
  • Language: Java
  • Spring Boot: 3.2.x
  • Dependencies: Spring Web, Spring Data JPA, H2 Database

Скачайте ZIP-архив и распакуйте его. Откройте проект в IDE. Структура будет выглядеть так:

src/
 └── main/
     ├── java/com/example/restapi/
     │   ├── RestapiApplication.java
     │   ├── controller/
     │   ├── model/
     │   └── repository/
     └── resources/
         └── application.properties

Это база, с которой мы начнем. Подготовка заняла буквально 2 минуты.

Шаг 2: Создание модели данных и репозитория

Начнем с модели. Создайте класс Task.java в папке model. Это будет сущность, которая представляет задачу:

package com.example.restapi.model;

import jakarta.persistence.*;

@Entity
@Table(name = "tasks")
public class Task {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(nullable = false)
    private String title;

    private boolean completed;

    // Конструкторы
    public Task() {}

    public Task(String title, boolean completed) {
        this.title = title;
        this.completed = completed;
    }

    // Геттеры и сеттеры
    public Long getId() { return id; }
    public void setId(Long id) { this.id = id; }
    public String getTitle() { return title; }
    public void setTitle(String title) { this.title = title; }
    public boolean isCompleted() { return completed; }
    public void setCompleted(boolean completed) { this.completed = completed; }
}

Теперь создадим репозиторий. В папке repository создайте интерфейс TaskRepository.java:

package com.example.restapi.repository;

import com.example.restapi.model.Task;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface TaskRepository extends JpaRepository<Task, Long> {
    // JpaRepository уже предоставляет все базовые CRUD-методы
}

На этом этапе мы описали структуру данных и способ взаимодействия с базой. Spring Data JPA автоматически создаст таблицу в H2 и предоставит методы findAll(), save(), deleteById() и другие. Это сэкономит часы ручного кодирования.

Шаг 3: Создание контроллера с REST-эндпоинтами

Теперь самое интересное — контроллер. В папке controller создайте класс TaskController.java. Он будет обрабатывать HTTP-запросы:

package com.example.restapi.controller;

import com.example.restapi.model.Task;
import com.example.restapi.repository.TaskRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/api/tasks")
public class TaskController {

    @Autowired
    private TaskRepository taskRepository;

    // GET: получить все задачи
    @GetMapping
    public List<Task> getAllTasks() {
        return taskRepository.findAll();
    }

    // GET: получить задачу по ID
    @GetMapping("/{id}")
    public ResponseEntity<Task> getTaskById(@PathVariable Long id) {
        return taskRepository.findById(id)
                .map(task -> ResponseEntity.ok(task))
                .orElse(ResponseEntity.notFound().build());
    }

    // POST: создать новую задачу
    @PostMapping
    public ResponseEntity<Task> createTask(@RequestBody Task task) {
        Task savedTask = taskRepository.save(task);
        return ResponseEntity.status(HttpStatus.CREATED).body(savedTask);
    }

    // PUT: обновить задачу
    @PutMapping("/{id}")
    public ResponseEntity<Task> updateTask(@PathVariable Long id, @RequestBody Task taskDetails) {
        return taskRepository.findById(id)
                .map(task -> {
                    task.setTitle(taskDetails.getTitle());
                    task.setCompleted(taskDetails.isCompleted());
                    Task updatedTask = taskRepository.save(task);
                    return ResponseEntity.ok(updatedTask);
                })
                .orElse(ResponseEntity.notFound().build());
    }

    // DELETE: удалить задачу
    @DeleteMapping("/{id}")
    public ResponseEntity<Void> deleteTask(@PathVariable Long id) {
        if (taskRepository.existsById(id)) {
            taskRepository.deleteById(id);
            return ResponseEntity.noContent().build();
        }
        return ResponseEntity.notFound().build();
    }
}

Всего 5 методов, которые реализуют полный CRUD. Обратите внимание на аннотации:

  • @RestController — говорит Spring, что это REST-контроллер.
  • @RequestMapping("/api/tasks") — базовый URL для всех эндпоинтов.
  • @GetMapping, @PostMapping, @PutMapping, @DeleteMapping — привязывают HTTP-методы.
  • @PathVariable — извлекает ID из URL.
  • @RequestBody — преобразует JSON из тела запроса в объект Java.

Этот контроллер — сердце нашего REST API. Вы можете расширять его, добавляя новые эндпоинты, например, для фильтрации или пагинации.

Шаг 4: Настройка и запуск приложения

Осталось настроить базу данных. Откройте файл application.properties в папке resources и добавьте:

spring.application.name=rest-api
server.port=8080

#                

Блоги

Рекомендаций по книгам