当前位置:网站首页 > Java教程 > 正文

java的rest教程



在本章节教程中,我将介绍我们在实现 REST API 时应遵循的一些**实践,和开发人员常犯的一些错误以及如何避免这些错误。

  • Spring Boot REST API **实践 - 第一章:实现 Get Collection API(本文)
  • Spring Boot REST API **实践 - 第二章:实现 Create 和 Update API
  • Spring Boot REST API **实践 - 第三章:实现 FindById 和 DeleteById API
  • Spring Boot REST API **实践 - 第四章:REST API 的异常处理

在第一章中,我们将实现第一个 API 端点,即获取资源列表。我们将了解开发人员常犯的一些错误以及如何避免这些错误。

首先,访问 https://start.springboot.io,选择 、、、、 和 starter,创建一个 Spring Boot 应用程序。

我们的示例应用及其简单,但却是按真实应用程序中遵循的相同实践进行操作。

本教程中的示例代码,可以在 GitHub 中找到。

我们要构建的 REST API 是用来管理书签(bookmark)的。书签(bookmark)包含 、、、 和 属性。

创建 JPA 实体 ,如下:

请注意,该实体类不是 的,因此其可见性仅限于 包。

我们将使用 Flyway 进行数据库迁移。要了解有关 Flyway 的更多信息,请查阅《Spring Boot Flyway 数据库迁移教程》。

在 目录下创建以下迁移脚本。

创建 接口,如下:

创建 ,它是一个带事务的 service,暴露在 包之外。

注意事项:

要把我们的组件设计成一个高内聚的组件,隐藏内部执行细节,以下几点非常重要:

  1. 注意, 实体和 不是 的。它们是包私有范围的类/接口。它们只应由 使用,并对 之外的包不可见。
  2. 是一个带事务的 service 层组件,将被 web 层或其他 service 组件使用。 的注解为 ,这意味着所有 方法都是事务性的,只允许对数据库进行只读操作。对于需要执行插入/更新/删除数据库操作的方法,我们可以通过在方法上添加 注解来覆盖这种只读行为。

Spring Boot 3.1.0 引入了对 Testcontainers 的支持,我们可以用它来编写集成测试和本地开发。

在生成应用程序时,我们选择了 和 starter。因此,生成的应用程序将在 目录下有一个 文件,内容如下:

我们可以通过在 IDE 运行 或在命令行中运行 ,在本地启动应用程序。

现在,我们已经完成了所有基本代码的设置,可以开始实现 API 端点了。让我们从实现获取所有书签的 API 端点开始。

我们可以按如下方式实现 API 端点:

先是 serivce,:

然后,创建 ,实现 API 端点,如下::

你可能会在很多教程和示例中看到这种实现方式,但这是一种不好的实现方式。

这种实现方式存在问题:

  1. 我们直接将数据库实体作为 REST API 响应暴露,在大多数情况下这是一种不好的做法。如果我们必须对实体进行任何更改,那么 API 响应格式也会随之改变,这可能并不可取。因此,我们应该创建一个 DTO,只公开 API 所需的字段。
  2. 如果我们获取数据只是为了返回给客户端,那么最好使用 DTO 投影,而不是加载实体。
  3. 方法将加载表中的所有记录,如果记录数以百万计,则可能导致 异常。如果表中的新数据是不断增加的,建议使用分页。

因此,让我们使用分页和 DTO 投影重新实现这个 API。

创建一个 类,表示通用的分页查询结果,如下:

创建 record 如下:

现在,让我们在 中添加一个方法,使用分页和 DTO 投影来检索书签,如下:

创建一个类来封装所有查询参数,如下:

如果将来想给 API 增加过滤和排序功能,使用 这个封装类将非常方便。

现在,更新 如下:

最后,更新 如下:

现在,如果运行应用程序并访问 API 端点,就会得到如下响应:

接下来,为我们的 API 端点编写一个自动化测试。我们将使用 来调用 API 端点,使用 来配置 PostgreSQL 数据库。

我们应始终确保数据库处于已知状态,以便编写可预测的断言。因此,创建 文件,内容如下:

现在,我们可以在测试方法中添加注解 ,以便在运行测试之前执行指定的 SQL 脚本。

接着,编写 API 测试代码,如下:

现在,运行测试,可以看到 启动了一个 PostgreSQL 数据库,并且 Spring Boot 在测试运行时自动配置使用该数据库。

我们将在本系列的《Spring Boot REST API **实践 - 第二章》中了解如何实现创建和更新书签的 API 端点。

在 Spring Boot REST API **实践系列的第一章中,我们学习了如何通过遵循一些**实践(如分页和 DTO 投影)来实现 API 端点,从而返回资源集合。

你可以在此 GitHub 仓库中找到本教程的示例代码。


参考:

版权声明


相关文章:

  • java界面教程视频2025-03-16 08:10:00
  • java教程1552025-03-16 08:10:00
  • java无锁并发教程2025-03-16 08:10:00
  • 萌新教程 java2025-03-16 08:10:00
  • java游戏使用教程2025-03-16 08:10:00
  • java多线程安全教程2025-03-16 08:10:00
  • 菜鸟教程 java版2025-03-16 08:10:00
  • 壁虎java教程全集2025-03-16 08:10:00
  • Java程序设计实例教程2025-03-16 08:10:00
  • java地图使用教程2025-03-16 08:10:00