首页 > 解决方案 > 如何在非英语语言中使用 GraphQL 枚举?后记

问题描述

我正在使用 postgraphile(一个使用 GraphQL api 包装 Postgres 数据库的库),并且我有一些希伯来语枚举。

正如 GraphQL 规范中所写,枚举值必须是名称 - 仅限于具有此正则表达式的 ASCII 子集:

/[_A-Za-z][_0-9A-Za-z]*/

我想使用 Postgres 枚举类型来对我的枚举列进行验证。Postgraphile 将 Postgres 枚举转换为 GraphQLEnum 类型,当值不在上述名称标准中时会导致错误(因为某些枚举是希伯来语)。

您将如何在不同的语言中使用枚举值?

标签: postgresqlenumsgraphqlpostgraphile

解决方案


正如您所说,目前 GraphQL 规范仅允许与正则Name表达式匹配的枚举值:

EnumValue::Name但不是true,或falsenull

-- https://facebook.github.io/graphql/draft/#sec-Enum-Value

Name::/[_A-Za-z][_0-9A-Za-z]*/

-- https://facebook.github.io/graphql/draft/#Name

我认为用其他语言表达枚举的愿望是令人信服的。我建议你帮助制定一个提案来解决 GraphQL 规范本身中的这些问题,你可以在 GitHub 上的 GraphQL 规范存储库中进行。已经有一个关于这个主题的问题悬而未决,您可以将您的见解贡献给:

https://github.com/facebook/graphql/issues/256

小心(并使用UAX#31之类的资源),可以扩展 GraphQL 的语法以启用多语言标识符,而无需求助于诸如“punycode”之类的方法。


推荐阅读