高级设置
在数据库中存储JSON列是很常见的用例。如果你使用数据库,例如PostgreSQL,你可以使用 json
或jsonb
类型存储JSON列。在GraphQL schema中,该列将被表示为JSON
标量类型。在内部,把值存储到数据库之前,飞布将json值编码为字符串,并在从数据库读取时解码它。这样,JSON
标量类型非常容易使用。
然而,该方法有个缺点。如果你打算存储复杂JSON对象,你无法利用GraphQL的类型系统优势。不容易从JSON对象中选择特定的字段。你必须要手动解析它,并且选择你想要的字段。
高级设置就是解决该问题的机制。飞布允许您扩展GraphQL Schema并用自定义类型替换特定的JSON字段。通过这种方式,你可以利用GraphQL的类型系统,同时能够将数据作为JSON对象存储在数据库中。
接下来让我们用具体示例说明下:
该操作声明了创建消息的接口。$message
是字符串类型。$payload
是JSON类型,没有方法可以校验入参。
现在我们用高级设置功能扩展GraphQL Schema。
首先,在自定义类型中,填写如下GraphQL Schema。
它将为"GraphQL Schema"增加两个结构体,type
开头为响应类型结构体,input
开头为入参类型结构体。
接下来,定义想要替换的JSON字段。
在字段类型映射中,选择表messages
,字段payload
,响应类型MessagePayload
,输入类型MessagePayloadInput
。
系统底层构建如下结构体:
最终,我们定义了输入字段替换和响应字段替换的类型。
现在,我们可以构建如下OPERATION,解决上述问题。
payload入参:替换成了db_MessagePayloadInput对象,基于该对象可以实现入参校验
payload响应:替换成了db_MessagePayload对象,可以“炸开”该对象,选择所需字段
最后更新于