簡體   English   中英

GraphQL 關於查詢設計中好的模式的問題

[英]GraphQL question about good patterns in query design

總的來說,我在 Graphql 和 API 開發方面還很陌生。

周圍有很多教程,但有時我對某些實現模式有疑問。 特別是,我想知道編寫 GraphQL 模式的最佳實踐。

在幾乎所有教程中(如 REST API 的情況),在編寫查詢以檢索實體列表時,通常如下所示:

query{
    Books{
       id,
       title,
       something
}}

幾乎總是會出現另一個查詢以恢復該實體的單個 object,例如:

query{
    Book(id:id){
       id,
       title,
       something
}}

這是我的第一個實施疑問。 當我 go 編寫與數據庫接口以進行數據檢索的 function 時,兩個解析器的代碼幾乎相同。 只有在第二種情況下我會添加一個 where 子句(例如 where bookID = id

此時我想知道,為什么我不能使用單個查詢並將各種過濾器添加為 arguments?

query{
    Books(filters:{id:id, title:title, ...}){
       id,
       title,
       something
}}

為每個過濾器添加不同的查詢有什么意義?

  • 圖書
  • 預訂編號
  • 書名
  • ...

這只是更好地組織入口點的問題,還是我遺漏了其他東西?

雖然對於 REST API 這對我來說很有意義,但對於 GraphQL 我看不到好處,因為過度獲取不是問題。

有好心人賜教嗎?

你是對的,這是一個主觀決定,你可以 go 無論哪種方式。 您應該在這里期待自以為是的答案。

當您在 typeDef 中定義查詢時,您還指定了您希望返回的內容。 前任:

query {
  getBook (id: ID!): Book
  getBooks: [Book!]!
}

在第一個查詢中,您知道返回的 object 是一本書。 在第二個中,您將獲得一系列書籍。

如果您構建可以返回一本或多本書的查詢,那很好 - 您可以期望一個數組中可能只有一本書。

當您期待一本書但得到多本書時,您可能會在前端遇到問題。 如果您按 ID 查詢圖書,您期望的是一本書,但如果您按書名查詢圖書,如果碰巧有多本具有相同書名的書(例如,同一書名的平裝本與精裝本),您可能會得到 0、1 或 N 本書).

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM