首页 > 其他分享 >Eolink 征文活动- -进阶体验:5个方面解锁Eolink高级玩法

Eolink 征文活动- -进阶体验:5个方面解锁Eolink高级玩法

时间:2022-12-27 14:35:11浏览次数:54  
标签:网关 return 进阶 征文活动 插件 API 文档 Eolink

前言

大家好我是路飞,上一篇文章 ​​Eolink — 一站式API协作平台​​ 向大家介绍了关于 Eolink 的产品特性、定位,以及作为API管理工具的一些基础用法(API文档生成、MOCK服务、API配置等)。那么本篇文章,就来带大家体验下 Eolink 的API文档数据导入导出、IDEA插件一键生成API文档、API并行测试等扩展功能的玩儿法。

Eolink:​​https://www.eolink.com/​

在介绍Eolink扩展功能之前,我们通过一张图简单对比下Eolink和国外API主流测试工具Postman的差异:



Eolink 征文活动- -进阶体验:5个方面解锁Eolink高级玩法_开发语言


相比于Postman,Eolink支持的功能更丰富,而且在UI交互、引导提示、功能扩展、数据迁移方面,Eolink要比 Postman做的更好。

作为国产API管理工具,Eolink本身就支持中文界面,不需要像Postman一样单独安装语言包插件,另外 Eolink 支持飞书、企业微信、钉钉等国内办公软件配套使用。

目前产品免费,可使用web版同时也可下载桌面端,Windows、Linux 、Mac平台均支持使用!

体验地址:​​Eolink专为开发者设计的免费 API 协作平台​

下面我们从5个方面体验下Eolink的强大功能:

玩法一:Eolink IDEA插件全代码注释自动生成API测试用例

1、插件安装

打开IDEA插件商店搜索:

  • Generate EolinkerDoc
  • Eolink ApiKit


Eolink 征文活动- -进阶体验:5个方面解锁Eolink高级玩法_原力计划_02


2、插件配置

打开IDEA setting,搜索Eolink:



Eolink 征文活动- -进阶体验:5个方面解锁Eolink高级玩法_intellij-idea_03


这里需要配置4个参数:

  • Server:服务器地址(自己的Eolink控制台域名)。
  • SpaceKey:空间Key。
  • ProjectHashKey:项目hashKey,唯一标识一个独立的项目空间。
  • Token:登录用户身份标识,就是我们首次注册时分配的注册账号。

那么,这4个参数从哪里获取呢?

首先访问Eolink官网:​​https://www.eolink.com/​​,从官网入口进入Eolink产品控制台~



Eolink 征文活动- -进阶体验:5个方面解锁Eolink高级玩法_intellij-idea_04




Eolink 征文活动- -进阶体验:5个方面解锁Eolink高级玩法_intellij-idea_05


Token 登录用户身份标识获取:



Eolink 征文活动- -进阶体验:5个方面解锁Eolink高级玩法_eolink_06


将上面步骤中获取的参数,添加到Eolink IDEA插件配置中,即可完成Eolink API工作台和IDEA的绑定。

3、API 文档一键生成

完成1、2两步骤配置后,就可以通过Eolink IDEA插件一键生成API测试用例,并同步到Eolink控制台个人空间。

为了演示方便,拿一个之前项目中的Controller接口测试效果,源代码如下:

 

/**
* @描述 文章分类相关操作的Controller接口
* @作者 天天发呆的程序员
* @创建时间 2022-06-04
*/
@RestController
@RequestMapping("/category")
@CrossOrigin
public class CategoryInfoController {

@Autowired
private CategoryInfoService categoryInfoService;

/**
* 获取文章分类列表
*
* @return
*/
@GetMapping("/list")
public JsonResult getCategoryList() {
List<CategoryInfoVO> categoryList = categoryInfoService.getCategoryList();
return JsonResultBuilder.success(categoryList);
}

/**
* 新增文章分类
*
* @param params 前端提交的创建文章分类的表单参数
* @return
*/
@PostMapping("/add")
public JsonResult addCategory(@RequestBody JSONObject params) {
String categoryName = params.get("categoryName").toString();
String description = params.get("description").toString();
Integer status = Integer.valueOf(params.get("status").toString());

// 发布文章分类之前进行查重校验
CategoryInfo categoryInfoTemp = categoryInfoService.getCategoryByName(categoryName);
if (categoryInfoTemp != null) {
return JsonResultBuilder.error("该文章分类已经存在!");
} else {
// 新增文章分类
CategoryInfo categoryInfo = categoryInfoService.addCategory(categoryName, description, status);
return JsonResultBuilder.success(categoryInfo);
}
}

/**
* 获取文章分类id集合
*
* @return
*/
@GetMapping("/ids")
public JsonResult getCategoryIds() {
List<Map<Integer, String>> categoryIds = categoryInfoService.getCategoryIds();
return JsonResultBuilder.success(categoryIds);
}
}

我们在CategoryInfoController类中有件生成Eolink API Doc:



Eolink 征文活动- -进阶体验:5个方面解锁Eolink高级玩法_eolink_07


点击执行后,会自动在该接口类中生成Eolink相关java doc注释:



Eolink 征文活动- -进阶体验:5个方面解锁Eolink高级玩法_eolink_08


注意java doc中 ​​eo.groupName​​要填写自己在Eolink工作台项目空间的分组,如果不填默认将API文档生成到默认分组中。

4、API文档上传/更新

步骤3完成后,就可以将我们的API DOC一键上传到Eolink的API管理工作台了:



Eolink 征文活动- -进阶体验:5个方面解锁Eolink高级玩法_原力计划_09


上传之后就可以在Eolink控制台看到我们的API测试用例了:



Eolink 征文活动- -进阶体验:5个方面解锁Eolink高级玩法_原力计划_10


Eolink API请求测试支持多种数据格式:

  • FORM表单
  • JSON请求体
  • XML
  • RWA
  • Binary等


Eolink 征文活动- -进阶体验:5个方面解锁Eolink高级玩法_eolink_11


上面4步骤,就是Eolink IDEA插件使用的一个完整流程,我觉得这个插件要比我们手写Swagger注解,然后SwaggerConfig配置扫描Controller路径,运行后端服务之后,访问swagger-ui.html要方面的多,流程也简洁的多!

玩法二:基于Swagger/git代码仓库地址自动生成API文档

Eolink不仅支持通过IDEA插件快速生成API文档,也可以将项目中原有的Swagger API文档一键同步到Eolink API管理空间,下面继续来看一个Swagger API文档导入Eolink的案例:

  • 示例工程:


Eolink 征文活动- -进阶体验:5个方面解锁Eolink高级玩法_eolink_12


SwaggerUI配置:

package com.hs.store.commons.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* Swagger2API文档的配置
*/
@Configuration
@EnableWebMvc
@EnableSwagger2
public class Swagger2Config implements WebMvcConfigurer {
@Bean
public Docket createRestApi(){
return new Docket(DocumentationType.SWAGGER_2)
.apiInfo(apiInfo())
.select()
//为当前包下controller生成API文档
.apis(RequestHandlerSelectors.basePackage("com.macro.mall.tiny.controller"))
//为有@Api注解的Controller生成API文档
// .apis(RequestHandlerSelectors.withClassAnnotation(Api.class))
//为有@ApiOperation注解的方法生成API文档
// .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
.paths(PathSelectors.any())
.build();
}

@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/**").addResourceLocations(
"classpath:/static/");
registry.addResourceHandler("swagger-ui.html").addResourceLocations(
"classpath:/META-INF/resources/");
registry.addResourceHandler("/webjars/**").addResourceLocations(
"classpath:/META-INF/resources/webjars/");
WebMvcConfigurer.super.addResourceHandlers(registry);
}\


private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("SwaggerUI演示")
.description("mall-tiny")
.contact("macro")
.version("1.0")
.build();
}
}

Demo Controller接口:

@Api("订单接口")
@RestController
@RequestMapping("/order")
public class OrderController {

@Resource
private OrderService orderService;

@ApiOperation("/查询用户订单")
@GetMapping("/findByOrderId")
public Map<Order,OrderUser>findByOrderId(Long orderId){
return orderService.findByOrderId(orderId);
}

@ApiOperation("/查询所有订单与用户信息")
@GetMapping("/findAll")
public List<Map<Order,OrderUser>>findAll(){
return orderService.findAll();
}

@ApiOperation("/查询所有订单")
@GetMapping("/findList")
public List<Order> findList(){
return orderService.findList();
}

@ApiOperation("/根据id删除订单")
@DeleteMapping("/deleteOrderById")
public int deleteOrderById(Long orderId){
return orderService.deleteOrderById(orderId);
}
}

项目启动后自动生成swaggerUI接口文档:



Eolink 征文活动- -进阶体验:5个方面解锁Eolink高级玩法_原力计划_13


在Eolink工作台,点击【其他】,选择【API文档生成】,导入Swagger API文档配置并生成新的Eolink API文档:



Eolink 征文活动- -进阶体验:5个方面解锁Eolink高级玩法_开发语言_14


添加API来源:(除了试用Swagger URL方式外也可以基于Git仓库生成API文档)



Eolink 征文活动- -进阶体验:5个方面解锁Eolink高级玩法_intellij-idea_15


输入Swagger.JSON URL地址后,即可添加成功,点击同步,自动生成接口文档:



Eolink 征文活动- -进阶体验:5个方面解锁Eolink高级玩法_java_16




Eolink 征文活动- -进阶体验:5个方面解锁Eolink高级玩法_eolink_17


示例效果如下图所示:



Eolink 征文活动- -进阶体验:5个方面解锁Eolink高级玩法_java_18


上面演示的案例是基于Swagger文档同步生成Eolink API文档,当然Eolink也支持多种文档源导入(例如GitHub/GitLab/Gitee等)。

接下来我们继续了解Eolink的第三个两点功能:API并行自动化测试:

玩法三:API并行自动化测试

Eolink很大程度上可以降低接口测试的成本提高测试效率,尤其是一键式并行自动化测试,是目前Postman等API管理工具所不具备的。

此外,Eolink同时支持多种协议的接口请求测试。这个我认为是目前用过的API测试工具中做的最好的,支持多协议请求,非常适合网关中间件程序员日常测试需求,市面上大多数API测试工具对gRpc/Rpc的支持都做得不是太好。

  • API自动化测试入口:


Eolink 征文活动- -进阶体验:5个方面解锁Eolink高级玩法_intellij-idea_19


  • 并行API自动化测试:


Eolink 征文活动- -进阶体验:5个方面解锁Eolink高级玩法_intellij-idea_20


  • 点击单个API测试结果,可查看测试用例执行详情:


Eolink 征文活动- -进阶体验:5个方面解锁Eolink高级玩法_java_21


另外还有一个很方便的功能,可以下载测试报告,离线预览(尤其是对于经常需要做大促压测的团队,这个可以作为压测报告使用~)



Eolink 征文活动- -进阶体验:5个方面解锁Eolink高级玩法_eolink_22



Eolink 征文活动- -进阶体验:5个方面解锁Eolink高级玩法_原力计划_23


  • 测试结果回归、API用例大盘:


Eolink 征文活动- -进阶体验:5个方面解锁Eolink高级玩法_intellij-idea_24


目前,很多公司都在推测试覆盖率,相比于写一个接口就需要新加一个单元测试用例,直接使用Eolink生成测试回归用例,后续可以反复调试。对于需要进行大版本升级的系统,直接使用Eolink集成自动化测试,就可以在上线发布之前,提前定位接口BUG。

玩法四:支持多平台数据导入导出

Eolink提供了一键导入功能,用户可以将以前用postman/apiofx/postapi等工具测试的接口文档从导出为json格式,并一键录入到Eolink。

举Apifox为例:



Eolink 征文活动- -进阶体验:5个方面解锁Eolink高级玩法_intellij-idea_25


导出之后会生成一个xxx.json文件,我们将这个文件导入Eolink即可一键同步API接口数据:



Eolink 征文活动- -进阶体验:5个方面解锁Eolink高级玩法_java_26


导入成功后会在项目空间中生成其他平台导入的API项目文件夹:



Eolink 征文活动- -进阶体验:5个方面解锁Eolink高级玩法_java_27



Eolink 征文活动- -进阶体验:5个方面解锁Eolink高级玩法_intellij-idea_28


  • 此外Eolink也支持传统的CURL/HTTP/Shell命令录入接口

curl代码如下:


curl --location --request POST 'http://127.0.0.1:80/onepiece/user/login?username=%3Cusername%3E&password=%3Cpassword%3E'


录入curl请求代码即可同步该API接口



Eolink 征文活动- -进阶体验:5个方面解锁Eolink高级玩法_java_29


此外Eolink也支持多种其他语言脚本:包括 JS、NodeJS、PHP、Java、GO、Ruby、Python等等。

玩法五:Eolink微服务网关

Eolink平台提供了企业版微服务网关解决方案:

GoKu API Gateway

现在可以免费申请试用:​​开源api网关_微服务网关_api网关-Eolink企业网关​

Goku API Gateway (中文名:悟空 API 网关)是 EOLINKER 旗下基于 Golang 开发的微服务网关,能够实现高性能 HTTP API 转发、多租户管理、API 访问权限控制等目的,拥有强大的自定义插件系统可以自行扩展,并且提供友好的图形化配置界面,能够快速帮助企业进行 API 服务治理、提高 API 服务的稳定性和安全性。

  • 主要功能包括:(企业版)

功能

描述

水平扩展

多集群、多节点

容器部署

支持通过容器(Kubernets等)动态扩展

路由

Header、Query、Location(Location指标类似Nginx的Location)

协议

HTTP、Webservice

数据处理

请求参数、返回参数处理的增删改或组装,返回数据格式可转成JSON或XML

多租户

多个访问策略

服务编排

一次请求,多次转发,重新组装返回数据

服务发现

支持对接Eureka、Nacos、Consul

负载均衡

根据权重

健康检查

转发列表自动剔除异常后端,后端正常再恢复转发

用户鉴权

匿名、Basic、Apikey、OAuth2.0、JWT、OAuth2+ 第三方认证服务器、AK/SK认证

流控控制

粒度可达API级别

格式转换

请求与响应内容的 XML 与 JSON 互相转换

熔断API

熔断单个API

服务降级

给某个API进行服务降级

灰度发布

金丝雀发布

SSL证书

管理多个证书

访问域名

为网关配置域名

API监控统计

监控数据输出到控制台,提供图表(请求数、响应时间等)查看;也可对接 Prometheus、Graphite 等第三方组件

API告警

告警粒度最细可达API级别,可发送告警邮件,也通过Webhook对接企业内部通知系统、短信API等

日志分析

全面的请求日志、节点日志和控制台日志,方便排查问题和做统计分析,支持输出日志内容到 Prometheus、Graphite等第三方组件

节点异常自启

节点异常重新拉起,并产生告警

Redis告警

自动监控Redis,异常则产生告警

用户权限

给不同的用户添加不同模块的操作权限

插件化

基于Golang自行开发插件

常用插件

流量控制、Basic鉴权、Apikey鉴权、OAuth2.0鉴权、JWT鉴权、OAuth2.0第三方认证、AK/SK认证、IP黑白名单、跨域、防重放攻击、返回头部、默认返回、参数映射、额外参数、熔断、服务降级、请求大小限制、数据缓存、请求xml/json转换、响应xml/json转换

其他

OPEN API

  • GoKu产品架构图


Eolink 征文活动- -进阶体验:5个方面解锁Eolink高级玩法_intellij-idea_30


此外GoKu也提供了一个开源版本的供开发者免费学习和使用:

Apinto API Gateway

Apinto 是专门为微服务架构设计的开源 API 网关,完全由 Go 语言开发,拥有目前市面上最强的性能及稳定性表现,并且可以自由扩展几乎所有功能模块。 提供丰富的流量管理、数据处理、协议转换等功能,例如动态路由、负载均衡、服务发现、熔断降级、身份认证、监控与告警等。

开源版Apiinto和Nginx以及Mashape开源网关中间件Kong性能对比:



Eolink 征文活动- -进阶体验:5个方面解锁Eolink高级玩法_intellij-idea_31


总结

Eolink无论是在功能丰富度还是用户交互体验上,相比于Postman等API辅助开发工具都有了极大的提升。希望类似的国产辅助开发产品越来越多。

另外,使用功能强大的辅助开发工具,可以使每个程序员都能在工作中把更多的精力投入到小而精美的技术开发上,繁琐枯燥的重复性工作交给辅助开发工具和组件去处理。我认为后端开发不只是CRUD,如果有兴趣也欢迎大家一起来研究和学习下相关的网关中间件产品研发和开源版本学习:

Apinto基于golang开发的API网关开源项目 ​​https://github.com/eolinker/goku_lite​

Java网关开源项目,大名鼎鼎的Gateway(静态配置网关,可以研究下如何在这个轮子基础上改造出一款支持动态配置的运行态网关中间件):​​Gitee 极速下载/spring-cloud-gateway​

最后:

标签:网关,return,进阶,征文活动,插件,API,文档,Eolink
From: https://blog.51cto.com/u_14518853/5972727

相关文章

  • 分析师的进阶与升华:努力把自己做“没”
    配图来自于百度搜索与本文内容无关努力把自己做没,是一个不可思议的事情。 努力把自己做没,那怎么算业绩呢,在BI中如何努力的把自己做没,是让自己变的更加重要,去聚焦更重要事情......
  • 后台开发进阶:白话DDD从入门到实践
      尝试用大家都能听得懂的话,结合我们在增值业务中的具体实现,分享一下我们从入门到实践DDD的一些心得。0.写在前面的DDD(领域驱动设计)是EricEvans于2003......
  • 后台开发进阶:白话DDD从入门到实践
      尝试用大家都能听得懂的话,结合我们在增值业务中的具体实现,分享一下我们从入门到实践DDD的一些心得。0.写在前面的DDD(领域驱动设计)是EricEvans于2003......
  • 后台开发进阶:白话DDD从入门到实践
      尝试用大家都能听得懂的话,结合我们在增值业务中的具体实现,分享一下我们从入门到实践DDD的一些心得。0.写在前面的DDD(领域驱动设计)是EricEvans于2003......
  • 网络进阶管理
    目录1.链路聚合2.链路聚合配置2.1Centos7/RHEL7配置bond聚合链路2.1.1Centos7/RHEL7配置bond02.1.2Centos7/RHEL7配置bond12.2Centos6/RHEL6配置bond聚合链路2.3Cen......
  • JavaScript学习--Item30 数组进阶全掌握
    在程序语言中数组的重要性不言而喻,JavaScript中数组也是最常使用的对象之一,数组是值的有序集合,由于弱类型的原因,JavaScript中数组十分灵活、强大,不像是Java等强类型高级语......
  • C++进阶(unordered_set+unordered_map模拟实现)
    unordered_setunordered_set是以无特定顺序存储唯一元素的容器,并且允许根据它们的值快速检索单个元素,是一种K模型。在unordered_set中,元素的值同时是它的key,它唯一地标......
  • 集合(进阶List系列)
    集合的体系结构Collection体系结构List和Set2种系列的集合特点有序指的是存和取的顺序一样,不是数值从大到小和从小到大排序2种系列的特点正好相反Collection......
  • C++进阶(哈希)
    vector容器补充(下面会用到)我们都知道vector容器不同于数组,能够进行动态扩容,其底层原理:所谓动态扩容,并不是在原空间之后接续新空间,因为无法保证原空间之后尚有可配置的空间......
  • Flutter 持久化存储之数据库存储进阶
    前言在移动端,持久化存储需求越来越普遍,无论是单机模式还是配置数据,都离不开存储,SharedPreferences可以解决大部分的问题,但是比较复杂的数据就很难处理了,这里使用关系型数......