目錄
指令概述
四種指令
@包括
@跳過
@Deprecated
@specifiedby
總結
首頁 web前端 css教學 使用內置的GraphQL指令

使用內置的GraphQL指令

Mar 19, 2025 am 10:35 AM

使用內置的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

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1657
14
CakePHP 教程
1415
52
Laravel 教程
1309
25
PHP教程
1257
29
C# 教程
1230
24
Google字體可變字體 Google字體可變字體 Apr 09, 2025 am 10:42 AM

我看到Google字體推出了新設計(Tweet)。與上一次大型重新設計相比,這感覺更加迭代。我幾乎無法分辨出區別

如何使用HTML,CSS和JavaScript創建動畫倒計時計時器 如何使用HTML,CSS和JavaScript創建動畫倒計時計時器 Apr 11, 2025 am 11:29 AM

您是否曾經在項目上需要一個倒計時計時器?對於這樣的東西,可以自然訪問插件,但實際上更多

HTML數據屬性指南 HTML數據屬性指南 Apr 11, 2025 am 11:50 AM

您想了解的有關HTML,CSS和JavaScript中數據屬性的所有信息。

我們如何創建一個在SVG中生成格子呢模式的靜態站點 我們如何創建一個在SVG中生成格子呢模式的靜態站點 Apr 09, 2025 am 11:29 AM

格子呢是一塊圖案布,通常與蘇格蘭有關,尤其是他們時尚的蘇格蘭語。在Tar​​tanify.com上,我們收集了5,000多個格子呢

使Sass更快的概念證明 使Sass更快的概念證明 Apr 16, 2025 am 10:38 AM

在一個新項目開始時,Sass彙編發生在眼睛的眨眼中。感覺很棒,尤其是當它與browsersync配對時,它重新加載

如何在WordPress主題中構建VUE組件 如何在WordPress主題中構建VUE組件 Apr 11, 2025 am 11:03 AM

內聯式模板指令使我們能夠將豐富的VUE組件構建為對現有WordPress標記的逐步增強。

php是A-OK用於模板 php是A-OK用於模板 Apr 11, 2025 am 11:04 AM

PHP模板通常會因促進Subpar代碼而變得不良說唱,但這並不是這樣的情況。讓我們看一下PHP項目如何執行基本的

編程SASS創建可訪問的顏色組合 編程SASS創建可訪問的顏色組合 Apr 09, 2025 am 11:30 AM

我們一直在尋求使網絡更容易訪問。顏色對比只是數學,因此Sass可以幫助涵蓋設計師可能錯過的邊緣案例。

See all articles