显示导航

使用Micronaut HTTP客户端的365bet地区

365bet地区在本指南中,我们将学习如何在365bet地区应用程序中使用Micronaut HTTP Client

s尼拉夫·埃萨(Nirav Essar)

365bet地区版本 4.0.1

365bet地区培训

365bet地区培训由创建并积极维护365bet地区框架的人们开发和交付

入门

在本指南中,您将学习如何执行HTTP客户端以进行外部rest API调用以及执行spock测试。Micronaut的HTTP客户端具有低级API和高级AOP驱动的API

您将需要什么

要完成本指南,您将需要以下内容

  • 花些时间在你手上

  • 体面的文本编辑器或IDE

  • 安装了JDK或更高版本JAVA首页适当配置

如何完成指南

要开始,请执行以下操作

要么

365bet地区指南存储库包含两个文件夹

  • 初始初始项目通常是一个简单的365bet地区应用程序,其中包含一些其他代码,可以帮助您快速入门

  • 完成一个完整的示例它是按照指南中介绍的步骤进行操作并将这些更改应用于文档的结果。初始

要完成指南,请转到初始

  • 光盘进入grails指南grails micronaut http初始

并按照下一节中的说明进行操作

您可以直接前往完成的例子如果你光盘进入grails指南grails micronaut http完成

编写申请

初始文件夹是使用创建的grails应用休息api个人资料这是一个简单的应用程序,可查询苹果iTunes API该应用需要一个搜索词并与

  • 示例grails SearchController

  • 示例grails ItunesSearchService

除非我们在本指南中实现它,否则呼叫将被打断。

通过运行验证功能gradlew bootRun然后转到URLhttp本地主机search searchWithApi searchTerm U.

您应该看到返回的虚拟数据JSON

Micronaut HTTP客户端

365bet地区中包含Micronaut HTTP Client依赖项休息api配置文件并替换数据存储其余客户端365bet地区从365bet地区开始,推荐使用365bet地区的HTTP客户端。旧的HTTP客户端在365bet地区中仍然向后兼容

在我们的音乐应用中,我们将在服务功能和测试中使用Micronaut HTTP客户端,因此我们必须在建立gradle编译:

建立gradle
依赖项编译"io micronaut micronaut http客户端"
}

使用低级Micronaut HTTP客户端API

我们将查询iTunes音乐人的存储库,并希望以JSON的形式接收几条信息,例如唱片集名称和指向唱片集的URL链接。为了轻松捕获返回数据,我们可以创建属性精确命名为POJO的POJO。与JSON结构相同iTunes API将返回resultCount包含以下专辑的列表

  • artistName

  • collectionName

  • collectionViewUrl

请注意以下POJO已创建

src main groovy示例grails SearchResult groovy
例子进口 常规转换CompileStatic

静态编译
 搜索结果 {
    整型resultCount清单结果[]
}
src main groovy示例grails专辑groovy
例子进口 常规转换CompileStatic

静态编译
 专辑 {
    artistNamecollectionNamecollectionViewUrl

我们需要将Micronaut配置为接受文字javascriptiTunes API中的MIME类型

grails应用配置会议应用yml
---
微型船:
    编解码器:
        json:
            AdditionalTypes文字javascript

在里面ItunesSearchService我们创建低级客户端并使用API​​进行联系iTunes苹果com从概念上讲,我们将创建一个具有的baseUrl然后形成发送得到URL参数的请求随后,我们将发出阻止请求并收到String响应对象映射器Jackson Databind提供的数据将传入的JSON映射到POJO。ItunesSearchService:

grails应用程序服务示例grails ItunesSearchService groovy
    清单searchWithApi搜索词的baseUrl"https itunes苹果com"HttpClient客户端HttpClient创建baseUrl到URL HttpRequest请求HttpRequest GET UriBuilder'搜索'queryParam'限制', 25queryParam'媒体', '音乐'queryParam'实体', '专辑'queryParam'术语'searchTerm建立HttpResponse响应客户端以阻止交换请求) (1)
        json resp正文ObjectMapper objectMapperObjectMapper objectMapper配置反序列化功能未知属性失败) (2)
        搜索结果searchResult objectMapper readValue json搜索结果) (3)searchResult结果
1 发出带有阻塞调用的请求并接受字符串响应
2 忽略额外的属性
3 将JSON映射到POJO

gradlew bootRun并击中http本地主机search searchWithApi searchTerm U并查看结果

使用声明性Micronaut HTTP客户端

可以使用Micronaut的声明性HTTP客户端实现相同的功能。客户注释可以在接口上声明,并且在编译时将为您创建一个客户端。接口方法可以使用得到并返回绑定的数据POJO这种简单而优雅的方法减少了前面示例中的许多代码

创建一个声明式客户端

src主要groovy示例grails ItunesClient groovy
例子进口 io micronaut http注解
进口 io micronaut http客户端注释客户端

客户("https itunes苹果com") (1)
接口ItunesClient得到("搜索限制媒体音乐实体专辑术语术语") (2)
    搜索结果搜索术语
1 声明客户并设置URL
2 定义一个得到带参数的要求

将客户端注入服务并将调用添加到接口方法

grails应用程序服务示例grails ItunesSearchService groovy
...
    自动接线Itunes客户端itunes客户端清单searchWithDeclarativeClient搜索词搜索结果searchResult itunes客户端搜索searchTerm searchResult结果

添加一个路由到服务方法的控制器方法

grails应用程序控制器示例grails SearchController常规
def searchWithDeclarativeClient搜索词如果搜索词清单相册itunesSearchService searchWithDeclarativeClient searchTerm响应搜索词搜索词专辑

gradlew bootRun并击中http localhost搜索searchWithDeclarativeClient searchTerm U并查看结果

使用Micronaut HTTP客户端进行测试

Micronaut客户端也可以与Spock一起用于测试目的。在我们的音乐应用中,我们创建一个域对象来捕获记录标签。我们将使用内置的grails领域类的REST API.

创建一个域对象并标记为资源资源和给定的URI,这将公开对象的REST功能

grails应用程序域示例grails RecordLabel groovy
例子进口 grails rest资源

资源资源小号'记录标签')
 记录标签 {
    那么

在里面BootStrap常规添加一些种子数据以进行测试

grails应用程序服务示例grails RecordLabelService groovy
例子进口 grails gorm services服务

服务记录标签接口RecordLabelService RecordLabel保存那么
grails应用程序初始化示例grails BootStrap常规
例子进口 常规转换CompileStatic

静态编译
 引导带RecordLabelService recordLabelService定义初始化ServletContext recordLabelService保存"华纳"recordLabelService保存"了索尼")
    }
    定义破坏

让我们创建一个集成测试套件,该套件首先执行得到请求检索RecordLabels的现有列表。测试还将发出一个开机自检在传入的数据映射中再插入一个记录标签在这两个测试中,我们将验证响应是否正确返回

src集成测试groovy示例grails RecordLabelControllerSpec groovy
例子进口 grails gorm事务回滚
进口 grails测试mixin集成集成
进口 365bet地区测试Spock一次
进口 Micronaut核心类型参数
进口 io micronaut http HttpRequest
进口 io micronaut http HttpResponse
进口 io micronaut http HttpStatus
进口 io micronaut http客户端HttpClient
进口 spock lang共享
进口 spock lang规格

积分
回滚
 RecordLabelControllerSpec 延伸规格共享HttpClient客户端之前
    虚空在里面(1)
        的baseUrl"HTTP本地主机$服务器端口"
        这个HttpClient的客户创造的baseUrl的toURL虚空 "测试休息获得记录标签"() {
        什么时候:"记录标签存在"HttpResponse清单<地图响应客户端到阻塞交换HttpRequest GET"记录标签"的论点清单, 地图)) (2)

        然后: "客户可以检索它们"分别显示HttpStatus状态(3)身体大小2身体0那么"华纳"身体1那么"了索尼"
    }

    虚空 "测试休息后记录标签"() {
        什么时候:"发布一个帖子"HttpResponse地图响应客户端到阻止交换HttpRequest POST"记录标签", [那么: "普遍"]), 地图) (4)

        然后: "元素已创建"resp status HttpStatus已创建(5)身体大小2响应主体ID响应主体名称"普遍"

    }
}
1 为所有测试一次初始化客户端给它提供一个URL服务器端口这是集成测试的分配端口
2 发出得到预期的身体类型将是“地图列表”
3 验证JSON的状态和主体元素
4 发送数据图到开机自检将被解释为JSON
5 验证测试的状态和返回的数据

使用测试应用gradlew检查.

运行应用程序

要运行该应用程序,请使用gradlew bootRun命令将在端口上启动应用程序

帮助365bet地区

OCI赞助了本指南的创建OCI提供了几种365bet地区服务:

免费咨询

OCI 365bet地区团队包括365bet地区联合创始人Jeff Scott Brown和Graeme Rocher检查我们的365bet地区课程并向发展和维护365bet地区的工程师学习

Grails OCI团队