如何使用 Java 构建了一个 RESTful API

RESTful API 是一种常用的 Web 开发模式,它使用 HTTP 协议来传输数据,让客户端可以通过标准的 HTTP 方法(如 GET、POST、PUT 和 DELETE)对服务器进行操作。在前后端分离的 Web 开发中,RESTful API 成为了数据通信的重要方式。本篇文章将介绍如何使用 Java 来构建一个 RESTful API。

1. 目录结构

建立一个 RESTful API 的目录结构通常可以参考以下方式:

  • pom.xml:Maven 项目管理工具配置文件。
  • src/main/java:Java 代码文件夹,存放所有后端代码。
  • com.example.restfulapi:Java 包名,用于存放所有后端代码。
  • config:Java 包名,用于存放应用程序的配置代码。
  • controller:Java 包名,用于存放控制器代码。
  • model:Java 包名,用于存放数据模型代码。
  • repository:Java 包名,用于存放数据访问层(如数据库)代码。
  • service:Java 包名,用于存放业务逻辑代码。
  • src/main/resources:资源文件夹,存放配置文件和静态资源文件。
  • application.yml:应用程序的配置文件。
  • log4j2.xml:日志配置文件
  • src/test:测试文件夹,存放测试代码。
  • README.md:项目说明文档。

2. 使用 Spring Boot 开发 RESTful API

Spring Boot 是一个快速开发 Web 应用程序的框架,它封装了许多常用的框架和库,使得开发过程变得更加简单。下面将演示如何使用 Spring Boot 构建一个 RESTful API。

2.1 配置文件

首先,我们需要在 application.yml 中设置应用程序的配置信息,包括服务器端口号和数据库连接信息等,例如:

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=UTC
    username: root
    password: root
  jpa:
    hibernate:
      ddl-auto: update
    generate-ddl: true
    show-sql: true
 
server:
  port: 8080

2.2 控制器

控制器是用来处理 API 请求的 Java 类,它们负责与前端进行通信,解析参数,并调用业务逻辑来生成响应。我们需要在 com.example.restfulapi.controller 包下新建一个 Java 类,例如:

@RestController
@RequestMapping("/api")
public class UserController {
 
    @Autowired
    private UserService userService;
 
    @GetMapping("/users")
    public List<User> getUsers() {
        return userService.getUsers();
    }
 
    @PostMapping("/user")
    public User createUser(@RequestBody User user) {
        return userService.createUser(user);
    }
 
    @PutMapping("/user/{id}")
    public User updateUser(@PathVariable Long id, @RequestBody User user) {
        return userService.updateUser(id, user);
    }
 
    @DeleteMapping("/user/{id}")
    public void deleteUser(@PathVariable Long id) {
        userService.deleteUser(id);
    }
}

上述代码通过 @RestController 注解声明了一个控制器类,并使用 @GetMapping@PostMapping@PutMapping@DeleteMapping 注解来定义 HTTP 请求的处理函数。在这个控制器中,我们依次实现了获取所有用户、创建用户、更新用户和删除用户四个 API 接口。

2.3 服务层

服务层包含了业务逻辑代码,在本例中,我们需要在 com.example.restfulapi.service 包下新建一个 Java 类来实现用户管理逻辑,例如:

@Service
public class UserServiceImpl implements UserService {
 
    @Autowired
    private UserRepository userRepository;
 
    @Override
    public List<User> getUsers() {
        return userRepository.findAll();
    }
 
    @Override
    public User createUser(User user) {
        return userRepository.save(user);
    }
 
    @Override
    public User updateUser(Long id, User user) {
        User oldUser = userRepository.getOne(id);
        if (oldUser != null) {
            BeanUtils.copyProperties(user, oldUser, "id");
            return userRepository.save(oldUser);
        }
        return null;
    }
 
    @Override
    public void deleteUser(Long id) {
        userRepository.deleteById(id);
    }
}

2.4 数据访问层

数据访问层包含了访问数据库的代码。我们需要在 com.example.restfulapi.repository 包下新建一个 Java 接口,例如:

public interface UserRepository extends JpaRepository<User, Long> {
}

这个接口就是一个 JPA Repository,它通过继承 JpaRepository 泛型接口来自动继承了许多常用的数据库操作方法,比如 findAllgetOnefindByIdsavedeleteById 等方法。

2.5 数据模型

数据模型用于表示实体类,例如这里我们要模拟用户类,我们可以在 com.example.restfulapi.model 包下新建一个 Java 类,例如:

@Entity
@Table(name = "user")
public class User implements Serializable {
 
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
 
    @NotNull(message = "用户名不能为空")
    private String username;
 
    @NotNull(message = "密码不能为空")
    private String password;
 
    private String email;
 
    // Getter、Setter 方法省略
}

上述代码通过 @Entity@Table 注解表示这个类与数据库表 user 相对应,而 @Id@GeneratedValue@NotNull 等注解则用于定义表的主键、自动增长方式和非空字段。这个类还实现了 Serializable 接口,使得我们可以方便地将这个类序列化成 JSON 或 XML 格式。

2.6 启动应用

完成上述步骤后,我们可以启动这个应用了。通过执行以下命令即可启动应用:

$ mvn spring-boot:run

命令执行成功后,应用将运行在默认端口 8080 上,此时我们可以通过浏览器来访问这个 API,例如访问 http://localhost:8080/api/users 就可以获取所有用户信息了。

3. 总结

本文主要介绍了如何使用 Java 和 Spring Boot 框架来构建一个 RESTful API,其中包括了控制器、服务层、数据访问层和数据模型部分的设计,而 application.yml 则用于配置应用程序的基本信息。通过学习本文,你可以了解到一个基本的 RESTful API 的结构和实现方式,帮助你进一步学习和开发。完整示例代码请参见我的 GitHub 代码库

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65ae4c93add4f0e0ff7da8b2