搜索
首页web前端css教程使用内置的GraphQL指令

使用内置的GraphQL指令

指令是GraphQL最好,也是最不言而喻的功能之一。

让我们探索使用GraphQL的内置架构和操作指令,所有符合GraphQL规格API都必须实现。如果您使用动态前端,它们非常有用,因为您可以根据用户与用户交互的方式进行控制来减少响应有效载荷。

指令概述

让我们想象一个应用程序,您可以选择自定义表中显示的列。如果隐藏两个或三列,那么实际上无需为这些单元格获取数据。但是,使用GraphQL指令,我们可以选择包括或跳过这些字段。

GraphQL规范定义了什么是指令以及可以使用的位置。具体而言,指令可以由消费者操作(例如查询)以及基础架构本身使用。或者,简单地说,指令要么基于模式或操作。生成架构时使用架构指令,并且执行查询时运行指令运行。

简而言之,指令可用于元数据,运行时提示,运行时解析(例如以特定格式返回日期)和扩展描述(如弃用)。

四种指令

GraphQL拥有规范工作草案中定义的四个主要指令,其中一个未发行为工作草案。

  • @包括
  • @跳过
  • @Deprecated
  • @specifiedby(工作草案)

如果您密切关注GraphQL,您还会注意到,您可以在今天可以尝试的JavaScript实现合并了两个其他指令 - @Stream和@defer。当社区在现实世界应用中对其进行测试时,这些都不是官方规格的一部分。

@包括

@Include指令符合其名称,允许我们通过传递IF参数来有条件地包括字段。由于有条件的条件,因此在查询中使用变量检查真实性是有意义的。

例如,如果以下示例中的变量是真实的,则名称字段将包含在查询响应中。

查询getusers($ dishame:boolean){
  用户{
    ID
    名称@Include(如果:$ dispayame)
  }
}

相反,我们可以选择不将变量$与查询一起传递为false的变量$通过将字段包含在内。我们还可以指定$ showeame变量的默认值,因此无需在每个请求中传递它:

查询getusers($ dishame:boolean = true){
  用户{
    ID
    名称@Include(如果:$ dispayame)
  }
}

@跳过

我们可以用仅此功能来表达同样的事情,但是使用@SKIP指令。如果价值是真实的,那么它将像您期望的那样跳过该领域。

查询getusers($ hidename:boolean){
  用户{
    ID
    名称@skip(如果:$ hidename)
  }
}

尽管这适用于单个字段,但有时我们可能希望包括或跳过多个字段。我们可以在这样的多行中复制@include和@skip的用法:

查询getusers($ include fields:boolean){
  用户{
    ID
    名称@include(如果:$ include fields)
    电子邮件@include(如果:$ include fields)
    角色@include(如果:$ include fields)
  }
}

@skip和@include指令均可在字段,片段蔓延和内联片段上使用,这意味着我们可以做其他事情,例如使用Inline Fragments:

查询getusers($ dubludefields:boolean){
  用户{
    ID
    ...在用户@skip上(如果:$ dubludefields){
      姓名
      电子邮件
      角色
    }
  }
}

如果已经定义了片段,当我们将片段扩展到查询中时,我们也可以使用@skip和@include:

用户上的fragment用户{
  姓名
  电子邮件
  角色
}

查询getusers($ dubludefields:boolean){
  用户{
    ID
    ...用户@skip(如果:$ dubludefields)
  }
}

@Deprecated

@deprectated指令仅出现在模式中,并且不是用户所提供的作为我们上面看到的查询的一部分。相反,@deprected指令是由维护GraphQL API架构的开发人员指定的。

作为用户,如果我们尝试获取架构中已弃用的字段,我们将收到这样的警告,提供上下文帮助。

为了标记不推翻的字段,我们需要在架构定义语言(SDL)中使用@Deprectated指令,并在此类参数中传递原因:

键入用户{
  id:id!
  标题:字符串@DepRecated(原因:“使用名称代替”)
  名称:字符串!
  电子邮件:字符串!
  角色:角色
}

如果我们将其与@include指令配对,则可以根据查询变量有条件地获取不弃用的字段:

用户上的fragment用户{
  标题@include(如果:$ incresseprecatedFields)
  姓名
  电子邮件
  角色
}

查询getusers($ inccesseprecatedFields:boolean!= false){
  用户{
    ID
    ...用户
  }
}

@specifiedby

@specifiedby是指令的第四个,目前是工作草案的一部分。它设置为自定义标量实现,并采用一个URL参数,该参数应指向标量的规范。

例如,如果我们为电子邮件地址添加自定义标量,我们将希望将URL传递给我们用作的正则条件的规范。使用最后一个示例和RFC#822中定义的建议,将在架构中定义了emailaddress的标量:

标量emailaddress @specifiedby(url:“ https://www.w3.org/protocols/rfc822/”)

建议定制指令具有前缀的名称,以防止与其他附加指令发生碰撞。如果您正在寻找一个示例自定义指令,以及它的创建方式,请查看GraphQl公共模式。这是一个自定义的GraphQL指令,具有代码和模式优先的支持,用于注释哪些API可以在公共场合消费。

总结

因此,这是GraphQL指令的高级外观。同样,我相信指示是一种被其他GraphQL功能所掩盖的无名英雄。我们已经对GraphQL模式有了很大的控制,指令为我们提供了更细粒度的控制,以便从查询中获得我们想要的东西。这就是这种效率,这使GraphQl API如此快速,最终更友好地使用。

而且,如果您要构建GraphQl API,请确保将这些指令包括在内省查询中。.拥有它们不仅使开发人员获得额外控制的好处,而且可以使总体更好的开发人员体验。试想一下,正确地@deprecate字段将有多大帮助,以便开发人员知道该怎么做,而不需要离开代码?这本身就是强大的。

标题图形由IsabelGonçalves在Unsplash上​​提供

以上是使用内置的GraphQL指令的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
我们如何标记Google字体并创建Goofonts.com我们如何标记Google字体并创建Goofonts.comApr 12, 2025 pm 12:02 PM

Goofonts是由开发人员和设计师丈夫签名的附带项目,它们都是版式的忠实拥护者。我们一直在标记Google

永恒的Web开发文章永恒的Web开发文章Apr 12, 2025 am 11:44 AM

Pavithra Kodmad向人们询问了他们认为是关于网络开发的一些最永恒的文章的建议

与部分元素的交易与部分元素的交易Apr 12, 2025 am 11:39 AM

同一天发表了两篇文章:

使用JavaScript API的状态练习GraphQl查询使用JavaScript API的状态练习GraphQl查询Apr 12, 2025 am 11:33 AM

学习如何构建GraphQL API可能具有挑战性。但是您可以学习如何在10分钟内使用GraphQL API!碰巧的是,我得到了完美的

组件级CMS组件级CMSApr 12, 2025 am 11:09 AM

当一个组件生活在数据查询居住在附近的数据查询的环境中时,视觉组件与

将类型设置在圆上...带偏移路径将类型设置在圆上...带偏移路径Apr 12, 2025 am 11:00 AM

这里是Yuanchuan的一些合法CSS骗局。有此CSS属性偏移路径。曾几何时,它被称为Motion-Path,然后被更名。我

'恢复”在CSS中有什么作用?'恢复”在CSS中有什么作用?Apr 12, 2025 am 10:59 AM

Miriam Suzanne在Mozilla开发人员的视频中解释了该主题。

现代恋人现代恋人Apr 12, 2025 am 10:58 AM

我喜欢这样的东西。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
4 周前By尊渡假赌尊渡假赌尊渡假赌

热工具

MinGW - 适用于 Windows 的极简 GNU

MinGW - 适用于 Windows 的极简 GNU

这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中

Atom编辑器mac版下载

Atom编辑器mac版下载

最流行的的开源编辑器

安全考试浏览器

安全考试浏览器

Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。