簡體   English   中英

表示 GraphQL 模式的最佳方式

[英]Best way to represent GraphQL schema

I start use graphQl query language and i use GraphQL Schema Definition Language as strings types to define types,but i see other developers use GraphQLObjectType function, that the JavaScript reference implementation of GraphQL uses to store information about the schema,and i confused about the best定義模式的方法,我需要知道在什么情況下我們可以使用 GraphQLObjectType

const queryType = new GraphQLObjectType({
  name: "Query",
  fields: {
    posts: {
      type: postType
    },
    author: {
      name: "author",
      type: authorType,
      arguments: { id: { type: new GraphQLNonNull(GraphQLInt) } }
    }
  }
});

GraphQL Schema Definition Language

type Author {
  id: Int!
  firstName: String
  lastName: String
  posts: [Post]
}type Post {
  id: Int!
  title: String
  author: Author
  votes: Int
}type Query {
  posts: [Post]
  author(id: Int!): Author
}

“最佳方式”在很大程度上取決於您的情況。 但是,我認為使用模式定義提供了值得考慮的好處。

  • 它與語言無關。 如果您需要與其他人共享此架構,或在其他工具或組件中使用它,使用 SDL 會更容易。
  • 將塊組合在一起更容易。 您可以在單獨的文件中定義接口和類型,並根據需要將它們組合在一起。
  • 它更簡潔。 在我看來,這讓你在 6 個月后回來時更容易理解。 我也認為這使得擴展和修改更容易。

由於這些原因,我相信 SDL 是最好的方法。 但是,在 JavaScript 中,兩種方式都有效,因此,如果您更願意編寫代碼並且上述注意事項對您來說並不重要,請堅持適合您的方式!

編輯:對不起,我回答有點太倉促了。

因此,確實,在定義架構時,您可以這樣做:

var schema = buildSchema(`
  type User {
    id: String
    name: String
  }
 
  type Query {
    user(id: String): User
  }
`);

或使用 GraphQLObjectType 等以編程方式構建您的架構。這取決於您的用例,但如果我的架構變得冗長,我還希望必須分別管理每個 object。 更一般地說,這就是graphql所說的:

如果您想從其他東西(如數據庫模式)自動創建 GraphQL 模式,這將特別有用。 對於創建和更新數據庫記錄之類的事情,您可能有一個通用格式。 這對於實現諸如聯合類型之類的功能也很有用,這些功能不會將 map 干凈地用於 ES6 類和模式語言。


這里有一些澄清: 它不是一個或另一個。 GraphQL 模式定義語言用於以 language-agnostic 方式談論 GraphQL 模式。 您不能按原樣使用它,它只是用於描述您的模式。 由於您使用的是我假設的 Javascript,因此您必須使用該語言的庫提供的內容來構建您的架構。

什么是 GraphQLObjectType?

引用文檔

GraphQL 模式的最基本組件是 object 類型,它們僅代表一種 object 您可以從您的服務中獲取,以及它具有哪些字段。 ...它是具有某些字段的類型。 架構中的大多數類型都是 object 類型。

顧名思義,這就是您用來描述 object 的東西。 GraphQLString 來描述字符串字段等。

GraphQL 服務可以用任何語言編寫。 由於我們不能依賴特定的編程語言語法,比如 JavaScript,來談論 GraphQL 模式,我們將定義我們自己的簡單語言。 我們將使用“GraphQL 模式語言”——它類似於查詢語言,並允許我們以 language-agnostic 的方式討論 GraphQL 模式。

暫無
暫無

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

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