使用 Spring Boot 实现 RESTful Web API

发布: (2025年12月14日 GMT+8 18:34)
6 min read
原文: Dev.to

Source: Dev.to

RESTful API?

REST(Representational State Transfer)是一种定义创建可伸缩 Web 服务规则的架构风格。REST API 使用以下 HTTP 方法:

  • GET – 检索数据
  • POST – 创建数据
  • PUT – 更新数据
  • DELETE – 删除数据

REST API 是 无状态 的,这意味着每个请求都是独立的,并且包含所有必需的信息。

我们将构建什么?

我们将使用 Spring Boot 构建一个 任务跟踪器 REST API。目标是设计一个简洁、意义明确且可投入生产的 API,帮助用户高效管理日常任务。

我们将构建的端点(用例)

端点HTTP 方法用例
POST /api/tasks创建任务添加一个包含标题、描述、类别且默认状态为 PENDING 的新任务
GET /api/tasks获取所有任务检索系统中所有可用的任务
GET /api/tasks/{id}根据 ID 获取任务使用任务 ID 获取单个任务的详细信息
PUT /api/tasks/{id}更新任务修改任务的标题、描述、类别或状态等信息
DELETE /api/tasks/{id}删除任务将任务从系统中移除
GET /api/tasks/status/{status}按状态获取任务根据任务状态过滤任务——PENDINGCOMPLETED

使用的数据库:H2 内存数据库

为简化演示,我们使用 H2,它提供:

  • 零安装
  • 自动控制台 UI
  • 开发快速
  • 测试方便

注意:应用重启后会重置数据库,非常适合教程使用。

分层架构概览

一个干净且易维护的 REST API 采用分层架构,主要包括三层:

  • Controller(控制器) – 处理进入的 API 请求。
  • Service(服务) – 包含业务逻辑。
  • Repository(仓库) – 管理数据库交互。

项目结构

Structure of our project

项目设置

1. 创建一个新的 Spring Boot 项目

前往 Spring Initializr 并配置项目:

  • Project:Maven
  • Language:Java
  • Spring Boot Version:最新稳定版
  • Groupcom.example(或你喜欢的包名)
  • Artifacttask-tracker-api
  • NameTask Tracker API
  • Packaging:Jar
  • Java Version:17 或更高

2. 添加所需依赖

勾选以下依赖:

  • Spring Web – 创建 REST 控制器并暴露 HTTP 端点。
  • Spring Data JPA – 基于 ORM 的数据库交互。
  • H2 Database – 轻量级内存数据库,适用于开发/测试。
  • Lombok – 减少样板代码(getter、setter、构造函数等)。

Spring initializer for reference

生成项目后解压,并在你的 IDE(IntelliJ IDEA、Eclipse、VS Code 等)中打开。

3. 运行应用

找到主类 TaskTrackerApiApplication.java 并运行。你应该会看到类似的日志行:

Started TaskTrackerApiApplication in X seconds

至此,Spring Boot 应用已启动。

控制器层

controller 包下创建 TaskController 类。该层负责处理进入的 HTTP 请求并向客户端返回响应。

package com.arshadpatel.task_tracker_api.controller;

import org.springframework.web.bind.annotation.RestController;

@RestController
public class TaskController {

    // 1. 创建任务

    // 2. 获取所有任务

    // 3. 根据 ID 获取任务

    // 4. 更新任务

    // 5. 删除任务

    // 6. 按状态获取任务
}

模型

model 包下创建 Task.java

package com.arshadpatel.task_tracker_api.model;

import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
@AllArgsConstructor
@Entity
public class Task {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String title;
    private String status;
}

注解含义

  • @Data – 生成 getter、setter、toString()equals()hashCode()
  • @NoArgsConstructor – 无参构造函数。
  • @AllArgsConstructor – 全参构造函数。
  • @Entity – 将类标记为 JPA 实体(数据库表)。
  • @Id – 主键。
  • @GeneratedValue – 自动生成主键值。

仓库和服务层

仓库

package com.arshadpatel.task_tracker_api.repository;

import com.arshadpatel.task_tracker_api.model.Task;
import org.springframework.data.jpa.repository.JpaRepository;

public interface TaskRepository extends JpaRepository<Task, Long> {
}

服务

package com.arshadpatel.task_tracker_api.service;

import com.arshadpatel.task_tracker_api.model.Task;
import com.arshadpatel.task_tracker_api.repository.TaskRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class TaskService {

    @Autowired
    private TaskRepository taskRepository;

    // 1. 创建任务

    // 2. 获取所有任务

    // 3. 根据 ID 获取任务

    // 4. 更新任务

    // 5. 删除任务

    // 6. 按状态获取任务
}

连接控制器和服务

在控制器中实现第一个 API 方法——创建任务。实现后,你可以使用 Postman 或其他 API 客户端发送 POST 请求并携带 JSON 请求体进行测试。

package com.arshadpatel.task_tracker_api.controller;

import com.arshadpatel.task_tracker_api.model.Task;
import com.arshadpatel.task_tracker_api.service.TaskService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

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

    @Autowired
    private TaskService taskService;

    @PostMapping
    public Task createTask(@RequestBody Task task) {
        // 调用服务层保存任务
        return taskService.createTask(task);
    }

    // 其余端点实现请继续在此添加...
}

继续按照相同的模式实现剩余的端点(GETPUTDELETE 等),将核心业务逻辑委托给 TaskService。当所有方法全部就位后,你将拥有一个使用 Spring Boot 完全可用的任务跟踪器 REST API。

Back to Blog

相关文章

阅读更多 »