网易首页 > 网易号 > 正文 申请入驻

适用于云的 Spring Boot:REST API 开发

0
分享至

每日分享最新,最流行的软件开发知识与最新行业趋势,希望大家能够一键三连,多多支持,跪求关注,点赞,留言。
概述在 Spring Cloud 应用程序上下文中特别重要的 Spring Boot 框架功能。在本文中,我们将讨论与 API 开发相关的功能。

微服务应用程序可以通过两种主要方式相互交互:REST 服务和消息系统。REST 方法是最常见的,将在本文中进行处理。我们将看到 Spring Boot 如何通过使用一组有用的注释和一些隐式后台行为(例如将 模型 对象序列化为 JSON 格式)使 REST API 的开发过程变得相当简单。
另一个重要问题与 API 的文档和共享有关,我们将看到这些问题通过名为Swagger的解决方案得到有效解决。将 Swagger 与Spring Boot集成使我们能够从源代码生成文档,作为 Swagger JSON 文件,甚至可以使用 Web 用户界面浏览和管理所有公开的 REST 服务。

REST API 开发
为了使用 Spring Boot 开发 REST API,我们需要在 Maven POM 中添加以下依赖项:


org.springframework.boot
spring-boot-starter-web

通过这种方式,我们将项目描述为一个 Web 应用程序,默认包含一个嵌入式 tomcat Web 服务器。然后,利用一组特定的注释,我们可以定义我们的控制器,这些控制器旨在向外部世界公开 HTTP REST 服务。我们可以通过简单地用@RestController 注释一个类来定义它们。接下来的步骤是设置定义实现我们服务的类方法与通过 HTTP 调用执行它们所需的 URI 路径之间的对应关系所需的映射。我们在以下代码片段中看到一个示例:
@RestController
@RequestMapping("/library")
public class BookController {
@Autowired
private BookService bookService;
@GetMapping("/book")
public List findAll() {
return bookService.findAll();
}
@GetMapping("/book/{id}")
public Book findById(@PathVariable("id") String id) {
return bookService.findById(id);
}
@PostMapping("/book")
public Book add(@RequestBody Book book) {
return bookService.save(book);
}
@PutMapping("/book")
public Book update(@RequestBody Book book) {
return bookService.save(book);
}
@DeleteMapping("/book/{id}")
public void deleteByTitle(@PathVariable("id") String id) {
bookService.deleteById(id);
}
@GetMapping(value = "/book", params = {"author"})
public List findByAuthor(@RequestParam("author") String author) {
return bookService.findByAuthor(author);
}
}
这里我们用@RestController 和@RequestMapping("/library") 注释了一个类。@RequestMapping 注释为用于调用我们的服务的 HTTP 路径指定了一个前缀。然后为类公共方法配置其他注释,旨在实现 HTTP REST 经典调用:GET、POST、PUT、DELETE:
@GetMapping
@PostMapping
@PutMapping
@DeleteMapping
这些注解包含 HTTP 路径的最后部分以及一个或多个参数(如有需要)。@PathVariable注解用于映射URI路径中直接传递的参数,并定义在相应方法注解中的花括号内。映射查询参数,也就是说,那些在“?”之后传递的参数 URI 中的字符,则可以使用 @RequestParameter 批注代替,如上面代码片段中的findByAuthor 方法。
例如,要获取数据库中的所有书籍,我们可以使用以下方法(如果应用程序正在我们的本地计算机上运行),并调用 HTTP GET 方法:
http://localhost:8080/library/book
要获得具有特定 ID 的图书:
http://localhost:8080/library/book/
或者最后得到作者的书籍列表(查询参数的情况)
http://localhost:8080/library/book?author=<作者姓名>
注释提供了一种简单的方法来“转换”一组服务中 Java 类的内部实现,这些服务可以通过 HTTP 协议从外部世界调用。另一个非常有用的特性是 JSON 数据的序列化。例如,如果我们考虑上面代码片段中名为add的 POST 方法,我们会看到它采用 Book 类型的参数。但我们知道对该方法的调用实际上是由带有 JSON 正文的 HTTP 调用进行的。Spring Boot 使用名为Jackson的库自动将该 JSON 转换为 Book 对象。
上述特性是促进微服务开发的良好基础。进一步的步骤是拥有一种有效的方式来共享和交流我们的 REST 服务的结构。在下一节中,我们将讨论这个问题,介绍一个名为Swagger的解决方案。
API 文档和 Swagger 解决方案
在微服务场景中开发一个完整的系统,其中有许多应用程序与 REST API 进行交互,需要保持所涉及的 API 的一致性。Swagger 是一个解决方案,包含许多工具来应对这些问题。Swagger通过 JSON 规范描述 API。我们可以用 JSON 格式定义我们的服务,然后从中生成基本代码,或者从我们的代码中生成 JSON。在此处描述的与 Spring Boot 的集成中,我们将使用第二个选项。
在上一节中,我们描述了如何使用一组给定的输入和输出对象映射和格式来开发由 Spring Boot 应用程序公开的 REST 服务。如果我们考虑大局,我们的单个应用程序必须与许多其他应用程序交互,这些应用程序可能由其他团队开发,它们有自己的 REST 接口,我们理解记录和传达这些接口的结构是多么重要。
在 Web 应用程序的上下文中将 Swagger 集成到 Spring Boot 中,我们可以生成 REST 服务的 JSON 描述,可通过特定的 URL 路径访问。我们还将有一个可用的 Swagger Web UI,允许我们浏览服务定义并与它们交互。
如何在 Spring Boot 中集成 Swagger
为了执行集成(我们在示例中使用 Swagger 2),我们要做的第一件事是设置相关的规范,如以下 Maven POM 片段所示:

io.springfox

springfox-swagger2

2.7.0

io.springfox

springfox-swagger-ui

2.7.0


然后我们必须通过 @EnableSwagger2注释启用 Swagger。在下面的代码片段示例中,我们在一个特定的配置类(用@Configuration 标记)中执行此操作,并且在同一个类中,我们定义了一个类型为Docket的 bean 。在Docket bean 配置中,我们设置了一个组名、一组基本信息(如标题、描述)和一个带有正则表达式的Predicate 对象,以捕获我们希望 Swagger 读取的 REST 服务可用的 URL 路径,在我们的示例中,所有路径都以“库”为前缀。
@Configuration
@EnableSwagger2
public class SwaggerConfig {
@Bean
public Docket postsApi() {
return new Docket(DocumentationType.SWAGGER_2).groupName("mygroup")
.apiInfo(apiInfo()).select().paths( regex("/library/.*")).build();
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder().title("REST API example")
.description("A minimal REST example with H2 in memory db as persistence layer")
.termsOfServiceUrl("http://codingstrain.com")
.license("REST API example License")
.licenseUrl("fake@gmail.com")
.version("1.0")
.build();
}
}
由于一个错误,我们还需要一个额外的配置,如下所示,假设我们使用的是 application.yaml 文件:

mvc:
pathmatch:
matching-strategy: ant_path_matcher

运行示例应用程序
您可以在以下 GitHub 链接中找到一个示例应用程序,其中包含前面部分中描述的所有配置:https ://github.com/mcasari/codingstrain.git 。您可以使用以下命令“git clone https://github.com/mcasari/codingstrain.git”将其安装为本地 git 存储库,并使用 Maven 从命令行或使用您喜欢的 IDE 编译和构建它。
您可以使用以下 Maven 命令“mvn spring-boot:run”运行它。由于它是一个 Spring Web 应用程序,它将与嵌入式 Web 服务器一起运行,默认情况下侦听8080端口。
我们可以使用 swagger 快速浏览甚至测试我们的 API。我们可以使用以下 URL 获取包含 API 定义的 JSON 文件:
http://localhost:8080/v2/api-docs?group=mygroup
从上面的 URL 可以看出,我们传递了一个名为group的查询参数,其值与我们在 Docket bean 配置中定义的组名称相对应。结果,我们获得了一个 JSON,它可以具有一些实用性,但不是我们所说的“用户友好”。作为更好的选择,我们可以通过以下地址使用 Swagger UI:
http://localhost:8080/swagger-ui.html
在下面的屏幕截图中,我们可以看到我们在屏幕上获得的内容。我们可以看到我们在应用程序中实现的所有 REST 服务,如果我们扩展它们,我们甚至可以与它们进行交互。例如,我们可以使用路径“/library/book”通过 HTTP POST 服务发布一本新书,或者使用以“ author” 为参数的可用 GET 方法获取作者的一本书。
招摇的用户界面
结论
在本文中,我们了解了 Spring Boot 如何简化 REST API 的开发。我们还看到集成像 Swagger 这样的解决方案如何改进服务定义的通信。这在微服务系统的上下文中尤为重要,在微服务系统中,我们有必须相互交互的独立应用程序,并且必须保持接口的一致性。
Spring Boot 还有另一个非常有用的功能,即所谓的Actuator依赖项,它提供了一组 HTTP 端点来监视、获取统计信息和管理生产环境中的应用程序。我们将在以下文章中介绍它:Spring Boot for Cloud - Actuator。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
43岁范冰冰现身马来西亚顶级豪门晚宴,打扮低调却美得耀眼

43岁范冰冰现身马来西亚顶级豪门晚宴,打扮低调却美得耀眼

时髦范
2024-12-01 23:42:53
赵本山公开怒了:这辈子最后悔的事,就是捧红了这个白眼狼!

赵本山公开怒了:这辈子最后悔的事,就是捧红了这个白眼狼!

娱乐的小灶
2024-11-30 11:07:08
女子穿“带沟”紧身瑜伽衣服坐地铁,乘客直翻白眼:一点都不正经

女子穿“带沟”紧身瑜伽衣服坐地铁,乘客直翻白眼:一点都不正经

打麻将的仔
2024-12-02 08:18:08
行程开始,赖清德抵达夏威夷,公开讲出4个字,大陆2部门表态

行程开始,赖清德抵达夏威夷,公开讲出4个字,大陆2部门表态

说天说地说实事
2024-12-02 10:20:20
向佐受了啥刺激?在抽象的路上一去不回头,还自称是“向朵花”

向佐受了啥刺激?在抽象的路上一去不回头,还自称是“向朵花”

木子爱娱乐大号
2024-12-01 17:48:45
泽连斯基开出停火条件:加入北约要紧,“其他领土”以后再收!俄方回应了

泽连斯基开出停火条件:加入北约要紧,“其他领土”以后再收!俄方回应了

每日经济新闻
2024-12-01 00:26:03
刷爆全网,又来一部上头的新剧

刷爆全网,又来一部上头的新剧

美剧院线
2024-11-30 22:39:08
确认,已当场击毙!

确认,已当场击毙!

FM93浙江交通之声
2024-12-01 20:57:26
有哪些秘密宁可烂在肚子里也不说出来?话题也是引起了网友们共鸣

有哪些秘密宁可烂在肚子里也不说出来?话题也是引起了网友们共鸣

滑稽斑马呀
2024-07-01 13:55:27
这样的女孩子倒给我100万,我都不要。这种人打扮的再靓丽又如何

这样的女孩子倒给我100万,我都不要。这种人打扮的再靓丽又如何

人情皆文史
2024-10-27 00:04:26
从三个故事看什么是契约精神(非常经典)

从三个故事看什么是契约精神(非常经典)

尚曦读史
2024-12-01 06:32:07
故事:赌王长女凄美人生,葬礼无人送终,商界大亨霍震霆哭成泪人

故事:赌王长女凄美人生,葬礼无人送终,商界大亨霍震霆哭成泪人

宅家伍菇凉
2024-11-29 11:54:49
72岁“香奈儿公主”一夜破产,住6㎡破屋,没有厕所,跪着做饭,未婚无子,却被百万人羡慕

72岁“香奈儿公主”一夜破产,住6㎡破屋,没有厕所,跪着做饭,未婚无子,却被百万人羡慕

背包旅行
2024-11-30 15:33:57
灵活务实有想法!阿莫林3场都是早早换掉4人,欧联60分钟用完换人

灵活务实有想法!阿莫林3场都是早早换掉4人,欧联60分钟用完换人

直播吧
2024-12-01 23:42:21
黄晓明与叶珂恋情破裂,竟与Baby重聚带娃引热议!

黄晓明与叶珂恋情破裂,竟与Baby重聚带娃引热议!

银河卧谈会
2024-12-01 20:53:29
冯小刚宣布与妻子离婚,财产平分因爱上他人,网友热议不断

冯小刚宣布与妻子离婚,财产平分因爱上他人,网友热议不断

小啾咪侃侃史
2024-11-01 07:45:13
45位两院院士出席!国家重大科研仪器成果在深发布

45位两院院士出席!国家重大科研仪器成果在深发布

南方都市报
2024-12-02 08:12:10
韩信被杀后,萧何看着他的尸体,冷冷地说了4个字,至今被人吐槽

韩信被杀后,萧何看着他的尸体,冷冷地说了4个字,至今被人吐槽

否知的否
2024-05-11 20:26:30
河南省监狱管理局原党委副书记、政委苗正钊接受纪律审查和监察调查

河南省监狱管理局原党委副书记、政委苗正钊接受纪律审查和监察调查

鲁中晨报
2024-12-02 11:52:07
霍思燕真自信!微胖身材穿紧身吊带裙,网友:治好了我的身材焦虑

霍思燕真自信!微胖身材穿紧身吊带裙,网友:治好了我的身材焦虑

时髦范
2024-11-30 00:03:29
2024-12-02 13:12:49
墨谈科技
墨谈科技
业务数码玩家.无聊的博主
3847文章数 581关注度
往期回顾 全部

科技要闻

11月成绩单:小鹏首破3万,蔚来小米破2万

头条要闻

没有关卡和奖励 博主将去世奶奶做进掌机游戏看哭网友

头条要闻

没有关卡和奖励 博主将去世奶奶做进掌机游戏看哭网友

体育要闻

强势比6根手指!瓜迪奥拉回击利物浦球迷

娱乐要闻

这是麦琳?烟熏妆神似安室奈美惠!

财经要闻

400人获刑!诈骗集团后台控制"股票"涨跌

汽车要闻

科技是中国豪车梦的支点 腾势Z9走心试驾体验

态度原创

房产
教育
旅游
本地
艺术

房产要闻

一燃再燃!又卖2亿!白鹅潭顶流,引爆全城!

教育要闻

4年学费48万,还是一个非全日制的博士,你会读吗?

旅游要闻

可徒步可骑行,地铁直达广州「森林氧吧」

本地新闻

云游中国|来伦布夏果感受充满Passion的人生

艺术要闻

故宫珍藏的墨迹《十七帖》,比拓本更精良,这才是地道的魏晋写法

无障碍浏览 进入关怀版