企业级微服务API网关Fizz-服务编排内置函数

概述

在前面的教程里已经介绍过服务编排的功能,服务编排主要是基于现有的业务微服务使用在线配置的方式快速的生成一个聚合接口。在进行入参或结果处理时,常要进行数据转换或计算。此时可用常用的内置函数来处理,如果函数处理不了可用通过编写脚本来实现。Fizz版本要求:v2.3或以上版本。函数以fn.开头,如fn.date.timestamp(), date为类别, 网关内置了以下几大类函数

  • 公共类 fn.common
  • 日期类 fn.date
  • 字符串类 fn.string
  • 编解码类 fn.codec
  • 数学类 fn.math
  • 数据列表类 fn.list

样例:

企业级微服务API网关Fizz-服务编排内置函数

企业级微服务API网关Fizz-服务编排内置函数

支持的所有函数列表可参考官方文档:函数使用文档

引用值

在函数里支持使用引用值,如:

fn.string.concat({step1.result.channelCode},{step1.result.nonce})

{step1.result.channelCode} 表示引用值, 引用step1结果里的channelCode字段的值

fn.string.concat({step1.result.channelCode},{g.account.name})

{g.account.name} 表示引用值, 引用公共资源”account.name”, 以g开头表示引用公共资源,公共资源可以定义键(Key)值(Value)对数据,在服务编排接口中通过引用键(Key)来获取值(Value),从而避免将值硬编码在接口中。菜单位置:告警管理 > 公共资源。点击菜单后进入公共资源列表页面,如图所示。

企业级微服务API网关Fizz-服务编排内置函数

公共资源使用文档

嵌套调用

支持多重嵌套调用,如:

fn.codec.md5(
    fn.date.add(
        fn.date.add(
            "2021-07-09 22:44:55",
            "yyyy-MM-dd HH:mm:ss",
            1,
            fn.math.addExact(999,1)
        ),
        "yyyy-MM-dd HH:mm:ss",
        fn.math.addExact(0,1),
        1000
    )
)
fn.string.toUpperCase(
    fn.codec.sha256(
        fn.string.concat(
            {step1.result.channelCode},
            {step1.result.nonce},
            {step1.result.timestamp},
            {step1.result.appSecret}
        )
    )
)

资料准备

Fizz网关安装

可参考:https://www.fizzgate.com/fizz/guide/installation

函数样例演示

在菜单:服务编排->接口列表下新增一个演示用的服务编排接口/test/func,接口挂在service1服务下(没有服务可以新增一个),定义三个入参, 分别是num1,num2两个数字用于演示数字比较,age年龄用于演示根据年龄做判断,因为该例子不涉及到外部接口调用”配置步骤”可留空。如图:

企业级微服务API网关Fizz-服务编排内置函数

企业级微服务API网关Fizz-服务编排内置函数

配置输出里添加以下输出字段:

  • currentTime:获取当前时间
  • threeHoursLater:当前时间加上3小时
  • birthdayFromIDCard:从身份证里提取生日并格式化展示
  • cardTypeByAge:判断年龄大于等于60返回老年卡,否则返回普通卡
  • signature:使用SHA256加密方式生成签名
  • maxNum:返回两个数中的最大值

企业级微服务API网关Fizz-服务编排内置函数

点击右上角的测试按钮进入到测试页面,填写Query参数,点击发送可得到结果:

企业级微服务API网关Fizz-服务编排内置函数

基于函数的嵌套调用可以实现比较复杂的运算,可以满足日常大部分运算的需求,更多用法参考官方文档:服务编排-函数

Fizz网关介绍

Fizz Gateway 是一个基于 Java开发的微服务聚合网关,能够实现热服务编排聚合、自动授权选择、线上服务脚本编码、在线测试、高性能路由、API审核管理、回调管理等目的,拥有强大的自定义插件系统可以自行扩展,并且提供友好的图形化配置界面,能够快速帮助企业进行API服务治理、减少中间层胶水代码以及降低编码投入、提高 API 服务的稳定性和安全性。

官网:https://www.fizzgate.com

GitHub:https://github.com/wehotel/fizz-gateway-community

码云:https://gitee.com/fizzgate/fizz-gateway

入门教程:https://www.fizzgate.com/fizz/guide/GettingStarted/

进阶教程:https://www.fizzgate.com/fizz/guide/advanced/

作者:黑鹰

Original: https://www.cnblogs.com/ZHONG-J/p/16283409.html
Author: ZHONG_J
Title: 企业级微服务API网关Fizz-服务编排内置函数

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/593169/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • SpringCloud(二).Eureka注册服务中心与服务调用

    Eureka(服务注册中心),主要包括对服务功能的注册、调用、熔断、降级、负载等。 有了服务中心项目的关系有哪些变化呢,用几张图来解释一下(暂缺,后续找到好的画图软件补上): 这样…

    Java 2023年6月7日
    089
  • Spring 源码(18)Spring IOC 容器的创建总结

    Spring IOC Bean对象的创建总结 根据前面的介绍,可以进行Spring IOC容器创建Bean的总结: 调用构造函数启动,调用过程中父类会忽略调用三个 Aware接口,…

    Java 2023年6月14日
    0109
  • 【声音工厂】微信小程序开发记录 为电台开发的微信小程序 【介绍】

    1.项目背景 因为在电台实习,所以想开发一个专为电台工作的播音员 上传配音的作品的微信小程序,上传的作品有 视频 音频 2.实现的功能有 微信小程序: 播放视频 音频 收藏喜欢的作…

    Java 2023年6月8日
    075
  • spring-retry使用

    Spring Retry提供了自动重新调用失败的操作的功能。这在错误可能是暂时性的(例如瞬时网络故障)的情况下很有用。Spring Retry提供对流程和基于策略的行为的声明式控制…

    Java 2023年5月30日
    0105
  • idea使用教程-模板的使用

    一、代码模板是什么 它的原理就是配置一些常用代码字母缩写,在输入简写时可以出现你预定义的固定模式的代码,使得开发效率大大提高,同时也可以增加个性化。最简单的例子就是在Java中输入…

    Java 2023年6月5日
    073
  • java 实体类命名规则

    1,PO(Persistent Object) 持久层对象,它是由一组属性和属性的get和set方法组成,最简单的 PO 就是对应数据库中某个表中的一条记录(也就是说,我们可以将数…

    Java 2023年5月29日
    099
  • Java集合框架之List

    1.List集合概要 2.Iterable接口 1.概要 2.重要方法 forEach方法:对Collection集合中的每个对象进行消费 List<student> …

    Java 2023年6月15日
    069
  • 【特殊的阻塞队列】 java.util.concurrent.SynchronousQueue 源码分析

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    Java 2023年6月9日
    075
  • FastAPI+pydantic+SQLAlchemy返回多个数据

    问题 比如在ORM中查询 all, 那么使用 pydantic.from_orm获取对应的数据呢? 解决思路 只需要, 将一个字段对应为 List, 元素为对应 SQLAlchem…

    Java 2023年6月7日
    070
  • LRU least recently used 与LinkedHashMap

    LRU ,最近最少使用淘汰算法,用于存储 限量limit的数据,不超过 limit的数据将直接存储,若超过limit,则将”最老的数据” 淘汰掉。使用Lin…

    Java 2023年6月9日
    076
  • 面向对象—继承

    package com.gao.test.Test4; public class Person { //属性 private int age; private String nam…

    Java 2023年6月5日
    072
  • 吴世枫老师指导下的团队作业—系统设计和任务分配

    一、建立团队项目 的码云git代码库: 地址为:https://gitee.com/ZZUOldUncle/rich-app 二、讨论制定团队的编码规范,讨论之前和讨论之后,队员阅…

    Java 2023年6月6日
    086
  • java 规则引擎

    表达式:可以计算出一个值 用逻辑运算符(与或非)将 “关系表达式” 或 “逻辑量” 连接起来的有意义的式子称为逻辑表达式。逻辑表达式…

    Java 2023年5月29日
    091
  • 元宇宙(metaverse)中文社区-工程实践

    欢迎访问元宇宙中文社区,在这里大家可以提问,回答,分享,诉说,一起构建一个元宇宙社区。 2021年”元宇宙”的这个词的火热程度在业内绝对不亚于疫情,趁着这个…

    Java 2023年6月5日
    0101
  • java反编译工具——Jd-gui

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    Java 2023年5月29日
    063
  • 如何给spring3 MVC中的Action做JUnit单元测试?

    使用了spring3 MVC后,给action做单元测试也很方便,我以前从来不给action写单元测试的,再在不同了,方便了,所以一定要写。 JUnitActionBase类是所有…

    Java 2023年5月30日
    074
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球