javascript
使用Spring Boot自动发布和监视API
如果您正在沿著微服務(wù)風(fēng)格的架構(gòu)前進(jìn),那么您將需要接受的一個(gè)租戶(hù)就是自動(dòng)化。 這種架構(gòu)風(fēng)格介紹了許多活動(dòng)部件。 如果成功,您的環(huán)境將具有大量服務(wù)API,企業(yè)可以將其用于應(yīng)用程序開(kāi)發(fā)和集成。
這意味著必須有一種方法可以發(fā)現(xiàn)可用的API文檔。 需要在整個(gè)企業(yè)范圍內(nèi)有效地傳達(dá)API信息,以顯示使用API??的位置,使用API??的頻率以及更改API的時(shí)間。 如果沒(méi)有這種類(lèi)型的監(jiān)視,將阻礙甚至可能削弱微服務(wù)風(fēng)格的體系結(jié)構(gòu)可以為企業(yè)帶來(lái)的敏捷性收益。
Pivotal的Spring Boot引領(lǐng)了以敏捷且最少的編碼方式開(kāi)發(fā)基于微服務(wù),云就緒應(yīng)用程序的途徑。 如果您想了解有關(guān)Spring Boot的更多信息,請(qǐng)查看Matt McCandless撰寫(xiě)的此博客 。 使用Spring Boot為服務(wù)實(shí)現(xiàn)RESTful API不需要太多的工作。 而且,將該服務(wù)置于微服務(wù)基礎(chǔ)架構(gòu)中也不需要太多工作。 (有關(guān)更多信息,請(qǐng)參見(jiàn)我們最新的白皮書(shū) 。)
該博客將介紹如何將Swagger / OpenAPI文檔應(yīng)用于Spring Boot實(shí)現(xiàn)。 我們將展示如何自動(dòng)將API文檔和監(jiān)視發(fā)布到API文檔門(mén)戶(hù)。
作為示例,我們介紹了一個(gè)參考Spring Boot API CRUD應(yīng)用程序(將Spring MVC / Data與Spring Fox一起使用),并將API文檔和統(tǒng)計(jì)信息自動(dòng)發(fā)布到文檔門(mén)戶(hù)GrokOla。 在示例中,我們引入了兩個(gè)開(kāi)源實(shí)用程序來(lái)幫助并允許已發(fā)布的API能夠搜索并在更改時(shí)通知用戶(hù)。
使用Spring Fox在Spring Boot中配置Swagger
OpenAPI(fka Swagger)是API文檔規(guī)范,它允許從代碼實(shí)現(xiàn)中收集RESTful API。 可以說(shuō),這比必須在單獨(dú)的步驟中記錄API更為有效。
Spring Fox是一個(gè)框架,可以自動(dòng)從Spring Boot應(yīng)用程序生成Swagger JSON文檔。 要了解從Spring Boot應(yīng)用程序生成Swagger JSON文檔有多么容易,請(qǐng)考慮這個(gè)簡(jiǎn)單的Employee API Service應(yīng)用程序,該應(yīng)用程序?yàn)閱T工實(shí)現(xiàn)了CRUD API。
可以在以下公共github存儲(chǔ)庫(kù)中找到員工CRUD API的實(shí)現(xiàn): https : //github.com/in-the-keyhole/khs-spring-boot-api-example 。
該示例應(yīng)用程序使用Spring MVC實(shí)現(xiàn)了以下API。 Spring Data使用為內(nèi)存數(shù)據(jù)庫(kù)配置的Hibernate映射到Employee對(duì)象模型。
啟動(dòng)后,可以使用下面顯示的部分khs.exmaple.api.Api Spring REST控制器實(shí)現(xiàn)中定義的以下API創(chuàng)建,讀取,更新和刪除Employee對(duì)象。
@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文檔。 這是將其應(yīng)用于示例應(yīng)用程序的方式。
將Spring Fox / Swagger Maven依賴(lài)項(xiàng)添加到您的項(xiàng)目中。
<dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>2.6.1</version> </dependency>然后在SwaggerConfig.java類(lèi)中定義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();} }配置完成并啟動(dòng)應(yīng)用程序后,可以使用以下URL獲得Swagger JSON文檔: http : //127.0.0.1 : 8080/v2/api-docs 。
自動(dòng)化API發(fā)布
使Swagger API JSON供團(tuán)隊(duì)使用,以消耗成功所必需的東西,尤其是在您試圖消除阻礙敏捷性的孤島并創(chuàng)建具有跨職能團(tuán)隊(duì)的組織(即“顛倒” Conway'法)的情況下。
Swagger框架可以生成人類(lèi)可讀HTML Swagger文檔,但是它不可索引/不可搜索,無(wú)法與其他API聚合,并且不允許添加其他文檔。 需要更好的機(jī)制。
理想情況下,這將是一個(gè)開(kāi)發(fā)人員API門(mén)戶(hù),它將匯總組織的可用API,為可搜索性編制索引API,允許開(kāi)發(fā)人員輕松添加其他文檔以及在A(yíng)PI更改時(shí)提供使用指標(biāo)和通知。
自動(dòng)化此步驟對(duì)于接受和提供價(jià)值至關(guān)重要。 我們?cè)贙eyhole Software的開(kāi)發(fā)人員已經(jīng)創(chuàng)建了一個(gè)開(kāi)源Spring Boot啟動(dòng)程序框架,該框架將在每次啟動(dòng)應(yīng)用程序時(shí)將Swagger發(fā)布到門(mén)戶(hù)。
@PublishSwagger
啟用S??pring Fox / Swagger后,可以通過(guò)以下步驟應(yīng)用https://github.com/in-the-keyhole/khs-spring-boot-publish-swagger-starter入門(mén)框架。
將以下依賴(lài)項(xiàng)添加到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門(mén)戶(hù)。
將@PublishSwagger批注添加到您的Spring Boot startup類(lèi)中。
@SpringBootApplication @PublishSwagger public class EmployeesApp {public static void main(String[] args) {SpringApplication.run(EmployeesApp.class, args);} }啟動(dòng)應(yīng)用程序后,Swagger JSON將發(fā)布到指定的publish-url 。 在這種情況下,它是Keyhole的GrokOla API Wiki門(mén)戶(hù)軟件的演示站點(diǎn)。
這是GrokOla中導(dǎo)入的API:
GrokOla是一個(gè)Wiki,它允許以無(wú)頭的自動(dòng)化方式手動(dòng)導(dǎo)入API。 該博客顯示了如何使用Spring Boot輕松發(fā)布API。 但是,使用GrokOla,您也可以手動(dòng)導(dǎo)入Swagger API。
您可以通過(guò)此鏈接獲取演示用戶(hù)ID。 該博客中的示例已經(jīng)配置為指向該演示站點(diǎn)。 因此,如果您有想法,可以使用API?? Wiki門(mén)戶(hù)。
@EnableApiStats
僅擁有隨時(shí)可用的API文檔不足以管理您的API。 了解誰(shuí),如何以及何時(shí)使用它們至關(guān)重要。 您可以使用一些工具和嗅探器來(lái)路由和過(guò)濾網(wǎng)絡(luò)活動(dòng),但這是一個(gè)單獨(dú)的軟件,部署到必須由操作人員而非開(kāi)發(fā)人員配置的位置。
已經(jīng)為Spring Boot開(kāi)發(fā)人員創(chuàng)建了一種更為簡(jiǎn)潔和易于應(yīng)用的機(jī)制,以獲取并向門(mén)戶(hù)發(fā)布各個(gè)應(yīng)用程序API使用情況統(tǒng)計(jì)信息,以進(jìn)行分析。 這已實(shí)現(xiàn)為另一個(gè)可在GitHub上使用的Spring Boot啟動(dòng)程序(公共,開(kāi)源)框架: https : //github.com/in-the-keyhole/khs-spring-boot-api-statistics-starter 。
此解決方案通過(guò)以下三個(gè)簡(jiǎn)單步驟應(yīng)用。
將以下依賴(lài)項(xiàng)添加到POM.XML 。
<dependency><groupId>com.keyholesoftware</groupId><artifactId>khs-spring-boot-api-statistics-starter</artifactId><version>1.0.1</version> </dependency>將以下配置添加到application.yml 。 這將向GrokOla演示實(shí)例發(fā)出API的統(tǒng)計(jì)信息。
api:statistics:name: employeeapipattern-match: /api/.*publish-url: https://demo.grokola.com/sherpa/api/stats/41token: 6e8f1cc6-3c53-4ebe-b496-53f19fb7e10e將@EnableApiStatistics添加到您的應(yīng)用程序boot main class實(shí)現(xiàn)中。
@SpringBootApplication @PublishSwagger @EnableApiStatistics public class EmployeesApp {public static void main(String[] args) {SpringApplication.run(EmployeesApp.class, args);} }當(dāng)應(yīng)用程序啟動(dòng)時(shí),針對(duì)API的每十次請(qǐng)求后,收集到的使用情況統(tǒng)計(jì)信息將被發(fā)送到publish-url 。 發(fā)送到URL之前的請(qǐng)求數(shù)是可配置的。 這是在單獨(dú)的線(xiàn)程上完成的,以免影響性能。
這是十個(gè)API請(qǐng)求后示例應(yīng)用程序的控制臺(tái):
注意,API JSON被發(fā)送到已發(fā)布的U??RL。
GrokOla已準(zhǔn)備好接受發(fā)出的API JSON流,并通過(guò)將API使用情況與已發(fā)布相關(guān)聯(lián)來(lái)向用戶(hù)提供使用情況統(tǒng)計(jì)信息。 可從GrokOla的API文檔部分進(jìn)行訪(fǎng)問(wèn)。 此API統(tǒng)計(jì)信息視圖的屏幕截圖如下所示。
“ Usage視圖顯示API路由類(lèi)型計(jì)數(shù)總持續(xù)時(shí)間和平均持續(xù)時(shí)間。 這使開(kāi)發(fā)人員可以確定使用其API的時(shí)間和時(shí)間。 您還可以查看受歡迎程度以及使用API??的時(shí)間和地點(diǎn)。
最后的想法
以無(wú)縫方式自動(dòng)發(fā)布API文檔,并提供一種監(jiān)視其使用行為的方法,對(duì)于成功實(shí)現(xiàn)基于服務(wù)的平臺(tái)至關(guān)重要。
具有自動(dòng)化的API發(fā)布和監(jiān)視功能將增強(qiáng)微服務(wù)架構(gòu)風(fēng)格,并為企業(yè)帶來(lái)敏捷性。 可用的API文檔應(yīng)該易于發(fā)現(xiàn),并且在整個(gè)企業(yè)中有效地傳達(dá)信息,從而決定使用API??的位置,使用頻率的API以及更改API的時(shí)間。
我們已經(jīng)發(fā)布了兩個(gè)開(kāi)源工具,可以幫助實(shí)現(xiàn)這一目標(biāo):
- Spring Boot Starter,用于在每次啟動(dòng)應(yīng)用程序時(shí)將Swagger / OpenAPI發(fā)布到門(mén)戶(hù)。
- https://github.com/in-the-keyhole/khs-spring-boot-publish-swagger-starter
- Spring Boot Starter,用于將各個(gè)應(yīng)用程序API使用情況統(tǒng)計(jì)信息發(fā)布到門(mén)戶(hù)以進(jìn)行分析。
- https://github.com/in-the-keyhole/khs-spring-boot-api-statistics-starter
希望對(duì)您有所幫助!
翻譯自: https://www.javacodegeeks.com/2017/03/auto-publishing-monitoring-apis-spring-boot.html
總結(jié)
以上是生活随笔為你收集整理的使用Spring Boot自动发布和监视API的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 狗狗电脑桌面高清壁纸图片(电脑壁纸狗狗高
- 下一篇: rest spring_带有Spring