schema文件拓展内容
在schema文件中,支持的类型共有下面这些类型
map, number, array, foreign, function, integer, boolean, record, string, set
其中,在type=record的时候,这种就必须定义field,类似java中的JavaBean一样,定义属性,以及属性值
比如:
return {
name = "ip-restriction",
fields = {
{ protocols = typedefs.protocols_http },
{ config = {
type = "record",
fields = {
{ allow = { type = "array", elements = typedefs.ip_or_cidr, }, },
{ deny = { type = "array", elements = typedefs.ip_or_cidr, }, },
这种就相当与是有一个config
对象,包含两个属性,这个两个属性都是数组类型,数组内部的元素必须符合ip校验规则,其数据结构对应为:
{
"name": "ip-restriction",
"config": {
"allow": [
"127.0.0.1"
"deny": [
"127.0.0.1"
在type=map的时候
比如:
return {
name = "response-ratelimiting",
fields = {
{ protocols = typedefs.protocols_http },
{ config = {
type = "record",
fields = {
{ limits = {
type = "map",
required = true,
len_min = 1,
keys = { type = "string" },
values = {
type = "record",
required = true,
fields = {
{ second = { type = "number", gt = 0 }, },
{ minute = { type = "number", gt = 0 }, },
{ hour = { type = "number", gt = 0 }, },
{ day = { type = "number", gt = 0 }, },
{ month = { type = "number", gt = 0 }, },
{ year = { type = "number", gt = 0 }, },
这种就相当于是JsonObject结构,其数据结构为:
{
"name": "response-ratelimiting",
"config": {
"limits": {
"second":1,
"minute":1,
"hour":1,
"day":1,
"month":1,
"year":1
还有一些比较复杂的嵌套对象,比如:
return {
name = "demo-ip-restriction",
fields = {
{ protocols = typedefs.protocols_http },
{ config = {
type = "record",
fields = {
{ rfilter = {
type = "array",
elements = {
type = "record",
fields = {
{ appkey = { type = "string", required = true }, },
{ deny = { type = "array", elements = typedefs.ip_or_cidr, }, },
这种对应的数据结构为:
{
"name": "demo-ip-restriction",
"config": {
"rfilter": [
"appkey": "1111",
"deny": [
"142.0.0.1/24"
"appkey": "2222",
"deny": [
"132.0.0.1/32"