下火吃什么药| 什么是阴道炎| 脑白质病变是什么病| 人生赢家什么意思| 什么什么发光| gift什么意思| 明朝后面是什么朝代| 第一次坐飞机注意什么| 蛐蛐吃什么| 什么情况下需要打破伤风| 猿是什么动物| 头皮挂什么科| 臀推是什么意思| 均可是什么意思| 人的脾脏起什么作用| 拉黑和删除有什么区别| 宝宝什么时候开始说话| 女人为什么会来月经| 壁立千仞无欲则刚是什么意思| 家里镜子放在什么位置比较好| 晚上尿床是什么原因| 出冷汗是什么原因| 7月29号是什么星座| 眼睛周围长斑是什么原因引起的| 观音菩萨属什么生肖| 一般什么人戴江诗丹顿| 时柱金舆是什么意思| 湿气重吃什么药最有效| 累觉不爱是什么意思| 没有什么就没有发言权| 破壁机什么牌子的最好| 98年的属什么| bmi是什么意思啊| 眼睛为什么会长麦粒肿| 6月29日什么星座| 宫外孕和宫内孕有什么区别| 梦见木头是什么意思| 12月22号是什么星座| 梦见捡到钱是什么预兆| 梦见自己大便是什么意思| 补肾壮阳吃什么药好| 正在候车是什么意思| 桃胶和什么相克| 眉毛中间叫什么部位| 屈光参差是什么意思| 葡萄套袋前打什么药| 成人补锌吃什么药| 操姓氏读什么| 拆骨肉是什么肉| 我低头向山沟是什么歌| 拉拉什么意思| 腋毛有什么作用| 恶露是什么样子的图片| 紫颠是什么病怎样治| 钊读什么| 尊敬是什么意思| 右腿麻木是什么原因| 睡眠不好去医院看什么科| 双相情感障碍是什么病| 他克莫司是什么药| 吃什么代谢快有助于减肥| 规则是什么意思| kg是什么意思| 海蜇是什么动物| 纬字五行属什么| 半硬半软是什么症状| 2月18号是什么星座| 为什么一吃东西就拉肚子| 一个斤一个页念什么| 一九四九年属什么生肖| 下气是什么意思| casio手表是什么牌子| ofs是什么意思| 为什么会得鼻炎| 前列腺肿瘤有什么症状| 血精是什么原因| 盐吃多了有什么危害| 什么是负氧离子| pt950是什么意思| 预防心肌梗塞吃什么药最好| 什么样的女人最旺夫| 呕吐发烧吃什么药| 春考是什么| 小狗什么时候可以洗澡| 今年9岁属什么| 外交部发言人什么级别| 蜻蜓为什么要点水| 静脉穿刺是什么意思| 走私是什么| 就请你给我多一点点时间是什么歌| 理化检验主要检验什么| 多管闲事是什么意思| 尿检粘液丝高什么意思| 妇科臭氧治疗的作用是什么| 热伤风吃什么感冒药| 尿发红什么原因| 去非洲要打什么疫苗| 形态各异的异是什么意思| 狗狗为什么会得细小| 看病人送什么| 上海什么房子不限购| 机械键盘什么轴最好| 弯是什么意思| 配制酒是什么意思| 牙痛吃什么消炎药| 阴虱有什么症状| 养什么宠物好| 长期吃优甲乐有什么副作用| 吃维e有什么好处和副作用| 男人有霉菌是什么症状| 相机hdr功能是什么意思| 大脚骨疼是什么原因| 什么姿势舒服| hpv是什么意思| 老掉头发是什么原因| 生日送什么花合适| 邓超什么星座的| 貔貅是什么动物| 新生儿甲状腺偏高有什么影响| 啤酒兑什么饮料好喝| 醋酸生育酚是什么东西| 三角梅什么时候开花| 不为良相便为良医是什么意思| nac是什么| 怀孕前期有什么症状| 翎字五行属什么| 月牙代表什么意思| 菊花不能和什么一起吃| 勾芡用什么淀粉| 猫的胡须是干什么用的| 女孩子学什么专业| 查凝血酶能查出什么病| 生育登记有什么用| 夜尿多是什么原因| 西周王陵为什么找不到| 血糖高吃什么食物最好最佳| 巨蟹座的幸运色是什么颜色| 尿常规白细胞偏高是什么原因| nub是什么意思| 秋天的落叶像什么| 天麻与什么煲汤最好| 附件炎吃什么药效果好| 菜心是什么菜的心| 5月4号是什么星座| 怀孕白细胞高是什么原因| 头晕需要做什么检查| 血氨低是什么原因| gcp是什么意思| 淳朴是什么意思| 多喝水有什么好处和坏处| rem什么意思| 爸爸的表哥叫什么| 激光是什么| 生是什么生肖| 肌红蛋白偏低什么原因| 拖鞋买什么材质的好| 敬谢不敏什么意思| 汗毛多是什么原因| 大校相当于政府什么官| 7月6号什么星座| 呼吸音粗是什么原因| 同型半胱氨酸查什么| 1970属什么生肖| 猪血和鸭血有什么区别| 舍什么救什么| 不以为意什么意思| 画蛇添足是什么生肖| 为什么姨妈迟迟不来| gi食物是什么意思| 解表药是什么意思| 什么书买不到| 抬头纹用什么护肤品可以去除| 恶露是什么样子的图片| 3月份出生是什么星座| 3月14日是什么日子| 核磁共振挂什么科| 双肺微结节是什么意思| 赤诚相见是什么意思| 大小便失禁是什么原因造成的| 鼻塞有脓鼻涕吃什么药| 肾疼挂什么科| 孕妇梦见下雨是什么意思| 乳房痛什么原因| 心跳突然加快是什么原因| 蝴蝶代表什么生肖| 黄连素又叫什么名字| 碳酸氢铵是什么东西| 狗吐了是什么原因| 珊瑚是什么| 头部麻木是什么征兆| 我的梦想是什么| 病毒感染发烧吃什么药| nsaid是什么药| 尿等待是什么症状| 记忆力减退吃什么药| 小孩喜欢趴着睡觉是什么原因| 关晓彤属什么生肖| 三高不能吃什么食物| 余事勿取是什么意思| 补体c3偏高说明什么| 血脂高吃什么药最好| 脾阳虚吃什么食物好| 乙肝病毒表面抗体高是什么意思| 1996年是属什么生肖| 肝脏分泌什么| 白细胞偏低吃什么药| 什么是假性近视| 吃相难看是什么意思| 天字加一笔是什么字| 吐血挂什么科| 胃胀气是什么原因引起的| 拔罐紫色说明什么| 反流性食管炎不能吃什么食物| 做梦抓鱼什么意思周公解梦| 10月份是什么星座| 西兰花不能和什么一起吃| poscer是什么牌子| 三点水加邑念什么| 过生日吃什么菜寓意好| 吃什么止腹泻| 什么呢| 鸡炖什么好吃| 姓名字号是什么意思| 推特是什么意思| 什么食物含锌最多| 水瓶座是什么性格| 负利率是什么意思| 离婚需要什么手续| 表哥的孩子叫我什么| 鳗鱼是什么鱼| 隐形眼镜没有护理液用什么代替| 无缘是什么意思| kksk是什么意思| 溢字五行属什么| 申时属什么| 胎儿右肾盂分离是什么意思| 爬灰什么意思| 三七有什么功效| 胃不舒服恶心想吐吃什么药| 阴阳两虚用什么药| 肾气不足有什么症状| 医生规培是什么意思| 12月14号是什么星座| 孕妇查凝血是检查什么| 淋巴结肿吃什么消炎药| 达克宁栓治疗什么妇科病| 什么茶养胃又治胃病| 避孕套玻尿酸的作用是什么| 一到晚上就饿什么原因| 丹毒是什么| 血糖高的人早餐吃什么| 5.8是什么星座| a4纸可以折什么| 今年是什么年| 眼底出血是什么原因引起的| 高烧用什么方法降温最快| 嘴巴发麻是什么原因| 萎缩性胃炎吃什么水果好| 宝宝吃什么奶粉好| 吃菠萝有什么好处| 少许纤维灶是什么意思| 肝火旺吃什么中药| 肾虚吃什么东西补得快| 发蜡和发泥有什么区别| 百度
Sitemap

Today marks the first release of the GraphQL spec ratified by the GraphQL Foundation. This is the culmination of three years of work, both technical and procedural. This is a proud moment and one worth celebrating.

What took so long?

The last ratified spec release was over three years ago, in June 2018. What took so long for this release? Certainly a worldwide pandemic didn?t help our collective focus. But over the last few years there have been massive procedural improvements, most notably the formation of the GraphQL Foundation.

The June 2018 release was the last under the stewardship of Facebook?s open source program. At the time, Facebook had unilateral control over the technology. This not only caused some legal teeth-gnashing but also had implications on who could contribute and how. While at Facebook I pushed to alleviate the legal concerns by moving GraphQL to MIT and OWFa licenses, however the single-company control was clearly hurting GraphQL adoption more than helping it. After I left Facebook in 2018 the contribution model was limiting my ability to run the project.

The GraphQL Foundation was charged with a mission to provide an open, neutral home for GraphQL and accelerate its development. It turns out this is easier said than done, and a colossal amount of work went into bootstrapping the foundation.

Does your company benefit from GraphQL?
Become a member and help us to sustain this mission!

Github accounts, domains, then trademark rights and other legal protections were transferred to the GraphQL Foundation. The GraphQL spec project joined the Joint Development Foundation which provided a legal framework for contributing to and using GraphQL while ensuring its neutral ownership. We established a technical steering committee (TSC) to democratize decisions. Onboarding onto this new contribution model had some growing pains, and we had to chase down new signed agreements from many past contributors. We?ve since set up github bots to help automate everything.

While a great number of people helped get the GraphQL Foundation running and the spec project onto this new development model, I?d like to specifically thank Brian Warner, GraphQL Foundation?s Program Manager, for his hard work and guidance.

What’s new in GraphQL 2021?

Since the June 2018 release, 35 contributors have made nearly 100 changes to the spec text ranging from minor clarifications to major changes.

Before I dig into those changes, it’s important to point out that as a user of GraphQL you’re actually unlikely to notice anything new in your day-to-day work. That’s because of a long-standing two-phase release process. Significant changes first go through an RFC Process which allows them to collect broad feedback and build consensus before being approved and merged by the spec editor into the working draft. After accumulating multiple changes, this working draft is later approved by GraphQL’s TSC as a ratified versioned release.

Nearly all GraphQL libraries and tools implement the working draft rather than the latest versioned release. This means quick access to each new capability as it is approved, including likely all of what?s new in this release.

That said, there are too many small improvements and clarifications to cover here so let?s focus on a few significant changes worth highlighting:

Custom scalar specs

GraphQL has always defined a small set of “built in” scalars while offering the ability for services to define their own. However these custom scalars have often been at a disadvantage as tools don?t always know what to do with them. Tool builders would love to offer better native behavior for the most common of these customer scalars, such as Date and URL, but need agreed upon rules.

At first, we considered defining those rules for a small handful of scalars directly into the GraphQL spec, but quickly ran into a problem. While conceptually simple, the details around something like dates are incredibly complex! A huge amount of variability and tradeoffs are found in existing standards like ISO-8601 or RFC-3339 and our working group struggled to agree on a GraphQL-specific set of rules. Worse still, we would have loved to introduce this type with the name “Date” or “DateTime” but found many existing services already using a custom scalar with these names and using different rules than we had agreed to. We absolutely did not want to break existing services.

We realized the type?s name didn?t need to be the only way tools could identify a well known custom scalar! Instead a new directive was introduced: @specifiedBy(url:). This allows a custom scalar to include a URL which describes its format so that tools can identify well known scalar specification URLs to imbue specific behavior. Now scalars with different names (i.e. Date or Time) can be interpreted as the same or many implementations of the same named scalar can have different interpretations (i.e. ISO-8601 or Unix timestamp). Most importantly these can be defined by anyone in the community.

For more information, read the initial proposal and spec contribution. Many contributed to this change, but specific thanks to Evan Huus, Andreas Marek and Matt Farmer for their direct championing of this change.

Repeatable & order significant directives

When we first introduced GraphQL, we knew it would be important to offer a way to extend the language. GraphQL directives allow tools across the ecosystem to add custom behavior to just about any aspect of the type system. Despite this, we made some assumptions that turned out to be too restrictive.

First, we originally required directives to be “unique per location”. The concern would be that a user might repeat a directive and tools might disagree on how to interpret this and do something unexpected or lose information. This was too restrictive for some cases, however simply removing the rule would still introduce the problem we sought to avoid. To solve for this, we now allow directives to individually opt-in by being marked as repeatable.

Next, the spec did not explicitly state whether the order directives are found at a location is significant or not. Some implementations used unordered data structures internally to represent directives, which led to different interpretations of the same source. This too, it turned out was too restrictive for some cases where directives compose in a specific order. Now, it is clear that this order must be respected.

For more information, read the repeatable proposal and directive order proposal. A notable post-humous thank you to Oleg Ilyenko for championing this change and being an incredibly impactful contributor during GraphQL?s early years.

Intermediate interfaces

GraphQL interfaces are a primary way of introducing heterogeneous data in a schema, describing the common set of fields available across a number of types which may appear in one spot. While type hierarchies can be quite complex and powerful in other languages, GraphQL favors simplicity over expressiveness and decided to restrict type hierarchies to a single level and not support inheritance. While this restriction has always been a bit contentious it mostly served schema authors well, save one common case: Connections.

GraphQL connections are a common convention for paginated data and when combined with interfaces can result in an overly restricted type system. Mike explores this problem and this solution in his fantastic deep dive blog post.

Now, interface hierarchies may be arbitrarily deep. However the desirable simplicity has been preserved by continuing to limit inheritance.

For more information, read the initial proposal. A huge thanks to Mike Marcacci for championing this change.

Removing parser ambiguity

GraphQL describes its language with a formal grammar, which should always produce exactly one interpretation given a GraphQL query. Grammar ambiguity is a problem faced by many languages and often sidestepped with a rule called greedy maximal munch. In practice, this rule isn?t always enough to avoid the problem.

While GraphQL now does use a similar greedy rule, it also uses “lookahead restrictions” to not only avoid ambiguity in a more general way, but also provide more helpful messages in the case of syntax errors.

I could write a blog post series entirely on this topic, but for more information read the greedy lexer proposal, number lookahead proposal, and type lookahead proposal.

What?s next?

While our goal remains to evolve GraphQL as a stable base, there are currently nearly 20 open proposals at various stages of development. This includes improvements to error reporting and schema coordinates, nullability control in queries, broader Unicode support, input unions and tagged unions, investigations into broader covariance support, and more.

Notably, all of this work is being championed by community members via our RFC process who have all agreed to the collaboration rules established by JDF. All work takes place in open-invite meetings by the GraphQL Working Group. Not only to we keep meticulous notes (thanks primarily to Benjie Gillam) but also share videos of our meetings.

While we do our best to make it easy to follow long, if you?re interested in contributing to GraphQL you are welcome to join our meetings or champion a proposal.

Again, if your organization benefits from GraphQL, please consider becoming a member and helping us to sustain the activities that support the health of our neutral ecosystem.

--

--

Lee Byron
Lee Byron

Written by Lee Byron

I design and build software and teams at Robinhood. React, GraphQL, Immutable.js, Web, Mobile, JavaScript. Opinions are my own, often flawed.

Responses (2)

来日方长是什么意思 淋巴发炎挂什么科 每天喝柠檬水有什么好处 什么样的 东北方向五行属什么
臣附议是什么意思 囊腺瘤是什么 深深是什么意思 色彩斑斓是什么意思 得理不饶人什么意思
土的行业有什么工作 油嘴滑舌指什么生肖 自由职业可以做什么 咖啡喝多了有什么危害 阴虚什么症状
项韧带钙化是什么意思 反应是什么意思 阿迪达斯和三叶草有什么区别 又双叒叕念什么啥意思 猕猴桃什么时候成熟
鲜黄花菜含有什么毒素hcv7jop4ns8r.cn 白羊座男和什么星座最配0735v.com 十三幺是什么意思520myf.com 晚上喝牛奶有什么好处hcv9jop1ns8r.cn 非布司他片是什么药hcv8jop6ns9r.cn
熟视无睹什么意思hcv8jop3ns3r.cn 医院红色手环代表什么huizhijixie.com 心率过快会有什么后果hcv8jop4ns5r.cn 2000年属什么hcv7jop9ns6r.cn wiggle是什么意思hcv8jop2ns8r.cn
什么人hcv8jop1ns8r.cn 血脂高胆固醇高吃什么好luyiluode.com 过期化妆品属于什么垃圾hcv8jop6ns4r.cn 番石榴什么时候成熟hcv8jop2ns0r.cn 盆腔积液是什么症状表现hcv9jop2ns0r.cn
结婚唱什么歌送给新人hcv9jop5ns5r.cn 精虫上脑是什么意思hcv9jop1ns9r.cn 子官肌瘤吃什么食物hcv7jop4ns6r.cn 喝茉莉花茶有什么好处gysmod.com 咖啡色配什么颜色好看hcv8jop8ns5r.cn
百度