# 概述

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

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

样例:

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

# 引用值

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

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),从而避免将值硬编码在接口中。菜单位置:告警管理 > 公共资源。点击菜单后进入公共资源列表页面,如图所示。

manager_global_resource_query

公共资源使用文档

# 嵌套调用

支持多重嵌套调用,如:

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年龄用于演示根据年龄做判断,因为该例子不涉及到外部接口调用"配置步骤“可留空。如图:

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

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

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

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

# 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/


作者:黑鹰