[英]Best way for splitting GraphQL schema into different modules in express-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 是最好的方法。 但是,在 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.