进阶体验:5个方面解锁Eolink高级玩法

前言

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

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

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

ee62fca4c13a411b2e6f84ce4041d0fa.png

相比于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
8c81c5a1963a7e2d529aa0492bd0a675.png

2、插件配置

打开IDEA setting,搜索Eolink:

ba78d627705a2e9c5abb4adcc1e43e79.png

这里需要配置4个参数:

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

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

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

39a1f248792f15d681ca372805481e1d.png
748319e088f97025372cdfc20d5c786e.png

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

38e4e0532e6fcdfbc4927216fe6208c8.png

将上面步骤中获取的参数,添加到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:

cb6a81e5d8336a0e8c1506179f57c7a9.png

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

80962490f2b8c6d779e9ca31e087a790.png

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

4、API文档上传/更新

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

55a150867b695dbbc2e7eb576aad6809.png

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

931085b33d4090a1a01141aad2762778.png

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

  • FORM表单
  • JSON请求体
  • XML
  • RWA
  • Binary等
2ddf8164f058e5709d14f2848cc4e492.png

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

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

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

  • 示例工程:
2fcde04a91c9b3616887d3767e409c60.png

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接口文档:

1ea7e418f3216a9f01209747c386fbcc.png

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

94fd2b5ec8db71cd36e7b99504275cab.png

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

b847637293b6710db5f67a6efc8ca280.png

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

ac23b3c6c07f52145e3c235b0ac2752b.png
98c2d6ac97d9c4a5cda2af4009e5b0d2.png

示例效果如下图所示:

508888ddce5340c96cfbd51729beaa10.png

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

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

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

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

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

  • API自动化测试入口:
23f8e15554ce302fd95f8378394f6653.png
  • 并行API自动化测试:
70b08e10c665ef2390258be2befb5219.png
  • 点击单个API测试结果,可查看测试用例执行详情:
936bbbd11e5bf8bc4b5c4efa608bd7ab.png

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

914f1830fe83a547d9d519aa4446a4d2.png
9c18f2a9cbd5c82d02b06f5994880ad3.png
  • 测试结果回归、API用例大盘:
7b6142e3e6a62f25d5885be3ad31680d.png

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

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

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

举Apifox为例:

a942b4831e443eb51d06a452a179945f.png

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

90841e1e1d82fd117c089e59463fbc65.png

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

57a18f4d202b84992b6666bba60bc063.png
344333184426ceb97cc266542605b1aa.png
  • 此外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接口

0434b1b75d63e92efa2f32db761122ad.png

此外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产品架构图
5dcf9a20db7fd41dca1ff832fbf36b5a.png

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

Apinto API Gateway

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

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

ac2e36923d98b6002c955737debe2db8.jpeg

总结

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

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

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

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

最后:

猜你喜欢

转载自blog.csdn.net/weixin_43591980/article/details/128315019