溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

graphql有哪些特性

發(fā)布時間:2022-02-18 17:26:17 來源:億速云 閱讀:181 作者:iii 欄目:開發(fā)技術

這篇文章主要介紹“graphql有哪些特性”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“graphql有哪些特性”文章能幫助大家解決問題。

graphql 是一種用于 API 的查詢語言,對你的 API 中的數(shù)據提供了一套易于理解的完整描述,使得客戶端能夠準確地獲得它需要的數(shù)據,減少數(shù)據的冗余。

graphql有哪些特性

對比 Rest API

Rest API 是和 GraphQL 同類的用于查詢的語言。Rest 把每個資源都用一個 URL 表示,訪問這個 URL 就能夠得到一份 JSON 格式的數(shù)據響應,但是這有一個缺點,你可能會得到與需求不相關的數(shù)據。而 GraphQL 則不會,發(fā)送過去的請求中指定了需要哪個資源,舉個簡單的例子,你需要這本書的作者的姓資源,那么 Rest API 會把把作者的名字也發(fā)給你,因為你是通過訪問作者的信息的 URL 來獲得姓的,而 GraphQL 則會只把需要的信息發(fā)過來,換句話說,需要什么資源是用戶來決定的。

RPC vs REST vs GraphQL(參考資料點擊這里)

graphql有哪些特性

在合適的時候選擇合適的工具是重要的,下面則列舉了在一些場景下最好使用什么工具來作為參考

1、如果是 Management API,這類 API 的特點如下:

  • 關注于對象與資源
  • 會有多種不同的客戶端
  • 需要良好的可發(fā)現(xiàn)性和文檔
  • 這種情景使用 REST + JSON API 可能會更好。

2、如果是 Command or Action API,這類 API 的特點如下:

  • 面向動作或者指令
  • 僅需要簡單的交互
  • 這種情況使用 RPC 就足夠了。

3、如果是 Internal Micro Services API,這類 API 的特點如下:

  • 消息密集型
  • 對系統(tǒng)性能有較高要求
  • 這種情景仍然建議使用 RPC。

4、如果是 Micro Services API,這類 API 的特點如下:

  • 消息密集型
  • 期望系統(tǒng)開銷較低
  • 這種情景使用 RPC 或者 REST 均可。

5、如果是 Data or Mobile API,這類 API 的特點是:

  • 數(shù)據類型是具有圖狀的特點
  • 希望對于高延遲場景可以有更好的優(yōu)化
  • 這種場景無疑 GraphQL 是最好的選擇。

GraphQL 的查詢與變更——如何查詢 GraphQL 服務器 以一個查詢結果為例:

{
hero {
name
}
}

該查詢將會獲得一個與其結構幾乎一樣的結果:

{"data": {"hero": {"name": "R2-D2"}
}
}

這是 GraphQL 最重要的特性,因為這樣一來,你就總是能得到你想要的數(shù)據,而服務器也準確地知道客戶端請求的字段。并且在GraphQL中查詢是可交互的,你可以按你喜歡來改變查詢,然后看看新的結果。

在查詢時可以添加上參數(shù),結果也會顯得更有趣。參數(shù)可以是多種不同的類型。GraphQL 自帶一套默認類型,但是 GraphQL 服務器可以聲明一套自己的定制類型,只要能序列化成你的傳輸格式即可。

例如,有如下查詢:

{
human(id: "1000") {
name
height
}
}

其結果為:

{"data": {"human": {"name": "Luke Skywalker","height": 1.72
}
}
}

在類似 REST 的系統(tǒng)中,你只能傳遞一組簡單參數(shù) —— 請求中的 query 參數(shù)和 URL 段。但是在 GraphQL 中,每一個字段和嵌套對象都能有自己的一組參數(shù),從而使得 GraphQL 可以完美替代多次 API 獲取請求。甚至你也可以給 標量(scalar)字段傳遞參數(shù),用于實現(xiàn)服務端的一次轉換,而不用每個客戶端分別轉換。

關于“graphql有哪些特性”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關的知識,可以關注億速云行業(yè)資訊頻道,小編每天都會為大家更新不同的知識點。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI