使用Spring Boot自动发布和监视API

如果您正在沿着微服务风格的架构前进,那么您将需要接受的一个租户就是自动化。 这种架构风格介绍了许多活动部件。 如果成功,您的环境将具有大量服务API,企业可以将其用于应用程序开发和集成。

这意味着必须有一种方法可以发现可用的API文档。 需要在整个企业范围内有效地传达API信息,以显示使用API​​的位置,使用API​​的频率以及更改API的时间。 如果没有这种类型的监视,将阻碍甚至可能削弱微服务风格的体系结构可以为企业带来的敏捷性收益。

Pivotal的Spring Boot引领了以敏捷且最少的编码方式开发基于微服务,云就绪应用程序的途径。 如果您想了解有关Spring Boot的更多信息,请查看Matt McCandless撰写的此博客 。 使用Spring Boot为服务实现RESTful API不需要太多的工作。 而且,将该服务置于微服务基础架构中也不需要太多工作。 (有关更多信息,请参见我们最新的白皮书 。)

该博客将介绍如何将Swagger / OpenAPI文档应用于Spring Boot实现。 我们将展示如何自动将API文档和监视发布到API文档门户。

作为示例,我们介绍了一个参考Spring Boot API CRUD应用程序(将Spring MVC / Data与Spring Fox一起使用),并将API文档和统计信息自动发布到文档门户GrokOla。 在示例中,我们引入了两个开源实用程序来帮助并允许已发布的API能够搜索并在更改时通知用户。

使用Spring Fox在Spring Boot中配置Swagger

OpenAPI(fka Swagger)是API文档规范,它允许从代码实现中收集RESTful API。 可以说,这比必须在单独的步骤中记录API更为有效。

Spring Fox是一个框架,可以自动从Spring Boot应用程序生成Swagger JSON文档。 要了解从Spring Boot应用程序生成Swagger JSON文档有多么容易,请考虑这个简单的Employee API Service应用程序,该应用程序为员工实现了CRUD API。

可以在以下公共github存储库中找到员工CRUD API的实现: https : //github.com/in-the-keyhole/khs-spring-boot-api-example 。

该示例应用程序使用Spring MVC实现了以下API。 Spring Data使用为内存数据库配置的Hibernate映射到Employee对象模型。

启动后,可以使用下面显示的部分khs.exmaple.api.Api Spring REST控制器实现中定义的以下API创建,读取,更新和删除Employee对象。

@RestController
@RequestMapping("/api")
public class Api {@AutowiredEmployeeService service;@RequestMapping(method = RequestMethod.GET, value = "/employees/{id}", produces = MediaType.APPLICATION_JSON_VALUE)ResponseEntity<Employee> employee(@PathVariable("id") Long id) {Employee employee = service.findEmployee(id);return new ResponseEntity<Employee>(employee, HttpStatus.OK);}@ApiOperation("value")@RequestMapping(method = RequestMethod.GET, value = "/employees", produces = MediaType.APPLICATION_JSON_VALUE)ResponseEntity<Iterable<Employee>> employees() {Iterable<Employee> employees = service.all();return new ResponseEntity<Iterable<Employee>>(employees, HttpStatus.OK);}……..

可以使用Spring Fox框架生成Swagger文档。 这是将其应用于示例应用程序的方式。

将Spring Fox / Swagger Maven依赖项添加到您的项目中。

<dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>2.6.1</version>
</dependency>

然后在SwaggerConfig.java类中定义Spring Fox配置以及@EnableSwagger2批注。

@Configuration
@EnableSwagger2
public class SwaggerConfig {@Beanpublic Docket apiDocket() {return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo()).select().paths(regex("/api.*")).build();}private ApiInfo apiInfo() {return new ApiInfoBuilder().title("Employee API Example").description("A implementation of an API Gateway for Keyhole Labs Microservice Reference.").contact(new Contact("Keyhole Software", "keyholesoftware.com", "asktheteam@keyholesoftware.com")).version("2.0").build();}
}

配置完成并启动应用程序后,可以使用以下URL获得Swagger JSON文档: http : //127.0.0.1 : 8080/v2/api-docs 。

自动化API发布

使Swagger API JSON供团队使用,以消耗成功所必需的东西,尤其是在您试图消除阻碍敏捷性的孤岛并创建具有跨职能团队的组织(即“颠倒” Conway'法)的情况下。

Swagger框架可以生成人类可读HTML Swagger文档,但是它不可索引/不可搜索,无法与其他API聚合,并且不允许添加其他文档。 需要更好的机制。

理想情况下,这将是一个开发人员API门户,它将汇总组织的可用API,为可搜索性编制索引API,允许开发人员轻松添加其他文档以及在API更改时提供使用指标和通知。

自动化此步骤对于接受和提供价值至关重要。 我们在Keyhole Software的开发人员已经创建了一个开源Spring Boot启动程序框架,该框架将在每次启动应用程序时将Swagger发布到门户。

@PublishSwagger

启用S​​pring Fox / Swagger后,可以通过以下步骤应用https://github.com/in-the-keyhole/khs-spring-boot-publish-swagger-starter入门框架。

将以下依赖项添加到pom.xml

<dependency><groupId>com.keyholesoftware</groupId>                     <artifactId>khs-spring-boot-publish-swagger-starter</artifactId> <version>1.0.0</version>
</dependency>

将以下属性添加到application.yml文件中:

swagger:publish:publish-url: https://demo.grokola.com/swagger/publish/14security-token: 6e8f1cc6-3c53-4ebe-b496-53f19fb7e10eswagger-url: http://127.0.0.1:${server.port}/v2/api-docs

注意:此配置指向GrokOla演示API Wiki门户。

@PublishSwagger批注添加到您的Spring Boot startup类中。

@SpringBootApplication
@PublishSwagger
public class EmployeesApp {public static void main(String[] args) {SpringApplication.run(EmployeesApp.class, args);}
}

启动应用程序后,Swagger JSON将发布到指定的publish-url 。 在这种情况下,它是Keyhole的GrokOla API Wiki门户软件的演示站点。

这是GrokOla中导入的API:

GrokOla是一个Wiki,它允许以无头的自动化方式手动导入API。 该博客显示了如何使用Spring Boot轻松发布API。 但是,使用GrokOla,您也可以手动导入Swagger API。

您可以通过此链接获取演示用户ID。 该博客中的示例已经配置为指向该演示站点。 因此,如果您有想法,可以使用API​​ Wiki门户。

@EnableApiStats

仅拥有随时可用的API文档不足以管理您的API。 了解谁,如何以及何时使用它们至关重要。 您可以使用一些工具和嗅探器来路由和过滤网络活动,但这是一个单独的软件,部署到必须由操作人员而非开发人员配置的位置。

已经为Spring Boot开发人员创建了一种更为简洁和易于应用的机制,以获取并向门户发布各个应用程序API使用情况统计信息,以进行分析。 这已实现为另一个可在GitHub上使用的Spring Boot启动程序(公共,开源)框架: https : //github.com/in-the-keyhole/khs-spring-boot-api-statistics-starter 。

此解决方案通过以下三个简单步骤应用。

将以下依赖项添加到POM.XML

<dependency><groupId>com.keyholesoftware</groupId><artifactId>khs-spring-boot-api-statistics-starter</artifactId><version>1.0.1</version>
</dependency>

将以下配置添加到application.yml 。 这将向GrokOla演示实例发出API的统计信息。

api:statistics:name: employeeapipattern-match: /api/.*publish-url: https://demo.grokola.com/sherpa/api/stats/41token: 6e8f1cc6-3c53-4ebe-b496-53f19fb7e10e

@EnableApiStatistics添加到您的应用程序boot main class实现中。

@SpringBootApplication
@PublishSwagger
@EnableApiStatistics
public class EmployeesApp {public static void main(String[] args) {SpringApplication.run(EmployeesApp.class, args);}
}

当应用程序启动时,针对API的每十次请求后,收集到的使用情况统计信息将被发送到publish-url 。 发送到URL之前的请求数是可配置的。 这是在单独的线程上完成的,以免影响性能。

这是十个API请求后示例应用程序的控制台:

注意,API JSON被发送到已发布的U​​RL。

GrokOla已准备好接受发出的API JSON流,并通过将API使用情况与已发布相关联来向用户提供使用情况统计信息。 可从GrokOla的API文档部分进行访问。 此API统计信息视图的屏幕截图如下所示。

Usage视图显示API路由类型计数总持续时间和平均持续时间。 这使开发人员可以确定使用其API的时间和时间。 您还可以查看受欢迎程度以及使用API​​的时间和地点。

最后的想法

以无缝方式自动发布API文档,并提供一种监视其使用行为的方法,对于成功实现基于服务的平台至关重要。

具有自动化的API发布和监视功能将增强微服务架构风格,并为企业带来敏捷性。 可用的API文档应该易于发现,并且在整个企业中有效地传达信息,从而决定使用API​​的位置,使用频率的API以及更改API的时间。

我们已经发布了两个开源工具,可以帮助实现这一目标:

  • Spring Boot Starter,用于在每次启动应用程序时将Swagger / OpenAPI发布到门户。
    • https://github.com/in-the-keyhole/khs-spring-boot-publish-swagger-starter
  • Spring Boot Starter,用于将各个应用程序API使用情况统计信息发布到门户以进行分析。
    • https://github.com/in-the-keyhole/khs-spring-boot-api-statistics-starter

希望对您有所帮助!

翻译自: https://www.javacodegeeks.com/2017/03/auto-publishing-monitoring-apis-spring-boot.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/350000.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql导入导出

导出1.将数据库mydb导出到e:\mysql\mydb.sql文件中&#xff1a;打开开始->运行->输入cmd 进入命令行模式c:\>mysqldump -h localhost -u root -p mydb >e:\mysql\mydb.sql然后输入密码&#xff0c;等待一会导出就成功了&#xff0c;可以到目标文件中检查是否成功。…

mysql 半同步关闭_MySQL的半同步模式配置

1、什么是半同步&#xff1f;在有一台主服务器、多台从服务器的情况下&#xff0c;主服务器只会等待一台从服务器同步数据。2、为什么要使用半同步&#xff1f;在使用同步模式时&#xff0c;数据的写速度太慢。在使用异步模式时&#xff0c;可能会造成从服务器上的现在存储的数…

GIS集成技术之二:数据集成

一。数据驱动。疑惑&#xff1a;ado.net作为一种通用的数据技术&#xff0c;适用与各种格式的文件各种格式的数据库&#xff0c;为一种通用的编程模型。GIS也提出数据集成&#xff1a;毫无疑问&#xff0c;不陷于某击中数据库。因此&#xff0c;我觉得GIS的中心是数据驱动&…

mysql中的replication_mysql中replication的相关问题总结

首先&#xff0c;要使用mysql中的replication&#xff0c;则需要配置master的my.cnf。例如&#xff1a;复制代码 代码示例:server-id 1log_bin mysql-bin#log_bin /var/log/mysql/mysql-bin.logexpire_logs_days 10max_binlog_size 100M#binlog_do_db include_database_na…

rest spring_带有Spring的REST的ETag

rest spring1.概述 本文将重点介绍ETag – Spring支持&#xff0c;RESTful API的集成测试以及带有curl的使用场景。 这是关于使用Spring 3.1和Spring Security 3.1和基于Java的配置来建立安全的RESTful Web服务的系列文章的第9篇。 REST with Spring系列&#xff1a; 第1部分 …

MySQL最早版本源码_MySQL旧版本升级为新版本

一&#xff1a;从版本3.23升级到4.104.10新特性&#xff1a;支持事务处理和存储过程升级过程的注意事项&#xff1a;1:升级采用直接复制安装文件的方法&#xff0c;简单实用&#xff0c;但要注意相关的配置更改&#xff1b; 2:直接复制备份的数据库不能通过复制的方法恢复&…

关于国产科学软件的思考(转)

转自 http://blog.pfan.cn/eMath/24264.html 作者 爱数学 http://blog.pfan.cn/eMath 原文如下&#xff1a; 这一段一直在问自己这个问题&#xff1a;“在我们常用的科学计算软件当中&#xff0c;有多少国产的&#xff1f;”&#xff0c;在记忆里面搜索了很久&#xff0c;似乎…

每个私有静态方法都是新类的候选人

您是否有私有的静态方法来帮助您将算法分解为更小的部分&#xff1f; 我做。 每次编写新方法时&#xff0c;我都会意识到它可以是一个新类。 当然&#xff0c;我不会从所有课程中选修课程&#xff0c;但这是目标。 私有静态方法不可重用&#xff0c;而类则可重用&#xff0c;这…

448. Find All Numbers Disappeared in an Array

一、题目 1、审题  2、分析 一个整形数组&#xff01;元素值为 1~size; 出现的元素次数为 1~2 次。 求出所有 1~size 中没有出现的整数&#xff01; 二、解答 1、思路 由于元素值都为 1~size之间。所以可以将数组下标 index 进行联系。 ① 遍历数组&#xff0c;将出现的元素值…

枚举:如何正确使用name()和toString()方法

两种方法之间的区别&#xff1f; Java枚举有两种方法来检索枚举常量的值&#xff1a; name&#xff08;&#xff09;和.toString&#xff08;&#xff09; 。 toString&#xff08;&#xff09;方法调用name&#xff08;&#xff09;方法&#xff0c;该方法返回枚举常量的字符串…

gradle maven_Gradle – Maven的观点

gradle maven正如我博客的读者所知道的&#xff0c; 我有点像Maven迷 。 我从2007年8月左右开始使用Maven&#xff0c;从没有回过头。 但是&#xff0c;与其他所有情况一样&#xff0c;“变化是唯一的常数”。 现在这个领域还有其他参与者&#xff0c;Gradle似乎是最有前途的。…

JDK 9中已弃用Java的Observer和Observable

在博客文章《 应用JDK 9 Deprecated增强功能》中 &#xff0c;我讨论了JDK 9中 Deprecated批注中对forRemoval&#xff08;&#xff09;和since&#xff08;&#xff09;可选元素&#xff08;方法&#xff09;的添加 。 我在那篇文章中说&#xff1a;“在Java SE API上应用新的…

理解依赖注入(IOC)和学习Unity

IOC:英文全称&#xff1a;Inversion of Control&#xff0c;中文名称&#xff1a;控制反转&#xff0c;它还有个名字叫依赖注入&#xff08;Dependency Injection&#xff09;。 作用&#xff1a;将各层的对象以松耦合的方式组织在一起&#xff0c;解耦&#xff0c;各层对象的调…

java中怎样验证重复文件_java – 如何在下载之前检查URL中的重复文件

如果您有基本URL并存储具有相同文件名的文件.由于文件修改时间和If-Modified-Since HTTP Header,您可以询问服务器是否值得再次下载映像.File f new File();// the file to downloadHttpURLConnection con (HttpURLConnection) new URL("http://www.test.com/"f.ge…

Jason是炮王

Jason是炮王 转载于:https://www.cnblogs.com/TankJam/p/11203636.html

事件传递 java_将事件传递/发送到父组件?

在Angular中&#xff0c;我可以创建一个发出动作的子组件&#xff1a;Component({...template: Click Me})export class ChildComponent {Output() onChildAction new EventEmitter();childAction() {this.onChildAction.emit();}}以及处理它的父组件 . 就像是&#xff1a;Com…

mongodb身份验证_MongoDB身份验证

mongodb身份验证我最近更新了Mongometer &#xff0c;使其更加灵活。 发布新版本后不久&#xff0c;其中一位用户通过在帖子中发表评论来反馈问题。 我启动了我的机器&#xff0c;打开了我的IDE&#xff0c;发现了问题&#xff0c;并在半小时内将修补程序推送到了github 。 这不…

mysql列类型

http://hi.baidu.com/b37798969/item/429fb25f838f1d3233e0a99b MySQL支持大量的列类型&#xff0c;它可以被分为3类&#xff1a;数字类型、日期和时间类型以及字符串(字符)类型。本节首先给出可用类型的一个概述&#xff0c;并且总结每个列类型的存储需求&#xff0c;然后提供…

Java13的API_JAVA基础--JAVA API常见对象(其他API)13

一、其他API1.System类system类中的方法和成员变量都是静态的&#xff0c; 不需要创建System对象就可以直接使用。1 /*2 * 演示System的使用3 */4 public classSystemDemo {5 public static voidmain(String[] args) {67 /*8 * System类中的静态成员变量&#xff1a; out 和 er…

适用于Java开发人员的Elasticsearch:简介

本文是我们学院课程的一部分&#xff0c;该课程的标题为Java开发人员的Elasticsearch教程 。 在本课程中&#xff0c;我们提供了一系列教程&#xff0c;以便您可以开发自己的基于Elasticsearch的应用程序。 我们涵盖了从安装和操作到Java API集成和报告的广泛主题。 通过我们简…