GraphQL 模式中的特殊字符

Posted

技术标签:

【中文标题】GraphQL 模式中的特殊字符【英文标题】:Special characters in GraphQL schema 【发布时间】:2018-01-27 03:08:42 【问题描述】:

是否有任何方法可以在 GraphQL 架构中启用特殊字符(例如,/:@ 在字段名称中)?

如果没有(我怀疑是这种情况),您是否知道修改 node.js 代码 (https://github.com/graphql/graphql-js) 以实现此类功能相对最简单的方法是什么?

【问题讨论】:

对于那些在没有提供帮助和教育的情况下投了反对票的人,我希望你为自己感到自豪,因为你必须通过展示你知道为什么这不是一个好主意而无需解释而感到优越为什么。 谢谢,@otissv。是的 - 糟糕,糟糕的***-ers! ;) @otissv 否决并不意味着它可能意味着各种各样的事情,比如研究不力或问题不明确。他们在这个网站上的投票不够。 @MartinDawson 鉴于投反对票的原因多种多样,没有解释的投反对票是毫无意义且无益的。一个简单的评论如“被否决 - 不清楚的问题”更具建设性。否则它只表明有问题。对这个问题投反对票意味着你知道答案。一个简单的“研究 graphql 规范”评论将指向正确的方向。也许如果有更多的反对意见和解释,你不会觉得这个网站没有足够的反对意见。 【参考方案1】:

我建议不要这样做。 graphql-js 遵循 graphql 规范中规定的语法形式。这样的更改将脱离规范,您的架构将不再适用于 graphql 工具。解析器会抛出一个无效的模式,因为这些字符在 graphql 中具有特殊含义。

GraphQL 规范

标点符号:: 之一! $ ( ) ... : = @ [ ] | GraphQL 文档包含标点符号以描述结构。 GraphQL 是一种数据描述语言而不是一种编程语言,因此 GraphQL 缺少常用来描述数学表达式的标点符号。

http://facebook.github.io/graphql/#sec-Punctuators

名称 :: /[_A-Za-z][_0-9A-Za-z]*/ GraphQL 查询文档充满了命名的东西:操作、字段、参数、指令、片段和变量。所有名称必须遵循相同的语法形式。 GraphQL 中的名称区分大小写。也就是说name、Name、NAME都指不同的名字。下划线很重要,这意味着 other_name 和 othername 是两个不同的名称。 GraphQL 中的名称仅限于此可能字符的 ASCII 子集,以支持与尽可能多的其他系统的互操作。

http://facebook.github.io/graphql/#sec-Names

【讨论】:

我明白了,感谢您的回复!我肯定需要重新考虑我的目标,但我的基本意图是支持某种形式的命名空间机制(大致围绕medium.com/@oleg.ilyenko/… 行)并提供生成包含特殊键的响应的可能性,例如“dc:title”或“@id”,在将 GraphQL 应用于链接数据时可能很有用。 要像authors/create 这样的命名空间,您需要编写自己的解析器。不值得,它与 graphql 的其余部分不兼容。我这样做的方式是,使用驼峰命名法在类型名称前面加上前缀,例如authorsCreate@ 符号是一个特殊字符,: 也是。 / 在当前规范中是不允许的,因此它是一个很好的候选者。但是您可以使用_ 来分隔不会破坏当前解析器的文件 @szymon 如果这回答了您的问题,请标记为已回答。

以上是关于GraphQL 模式中的特殊字符的主要内容,如果未能解决你的问题,请参考以下文章

在 C++ 中查找传入字符串中的模式(包括像°这样的特殊字符)

删除scrapy python中的特殊字符

从R中的字符串中删除所有特殊字符?

除以连续两个特殊字符结尾的字符串外,按模式捕获

Linux主要shell命令详解(中)

为啥文件名不能出现特殊符号?