我正在開發一個具有相當數量的查詢和突變的應用程式。資料的結構通常并不復雜,但有很多,所以我給自己做了一個片段,它會生成最常見的東西在它們中重復。該片段還為突變生成輸入,因此它可以用于簡單和復雜的資料結構。在相當多的情況下,輸入只是用于添加名稱。API 應該主要由我的前端使用,但在應用程式足夠成熟后應該公開可用。在約定方面這樣做是一個問題嗎?
我的意思示例
/*=============================================
Types
=============================================*/
interface AddSampleSchemaInput {
input: AddSampleSchema
}
interface AddSampleSchema {
name: string
}
/*=============================================
Main
=============================================*/
export const SampleSchemaModule = {
typeDefs: gql`
type Mutation {
addSampleSchema(input: AddSampleSchemaInput): SampleSchema!
}
type SampleSchema {
_id: ID!
name: String!
}
input AddSampleSchemaInput {
name: String!
}
`
,
resolvers: {
Mutation: {
addSampleSchema: async (parents: any, args: AddSampleSchemaInput, context: GraphqlContext) => {
}
}
}
}
我認為應該是的樣本。
/*=============================================
Main
=============================================*/
export const SampleSchemaModule = {
typeDefs: gql`
type Mutation {
addSampleSchema(name: String): SampleSchema!
}
type SampleSchema {
_id: ID!
name: String!
}
`
,
resolvers: {
Mutation: {
addSampleSchema: async (parents: any, args: { name: string }, context: GraphqlContext) => {
}
}
}
}
export default SampleSchemaModule
第一個代碼示例的使用會是一個問題。這意味著使用輸入(輸入 AddSampleSchemaInput),即使它只包含一個值(在本例中為名稱)。
或者換句話說,無論復雜程度如何,對每個突變都使用輸入是一個問題。
或者對前端的影響:
addDogBreed({
variables: {
input: {
name: "Retriever",
avergeHeight: 0.65
}
}
})
addDog({
variables: {
input: {
name: "Charlie"
}
}
})
// ======= VS =======
addDogBreed({
variables: {
input: {
name: "Retriever",
avergeHeight: 0.65
}
}
})
addDog({
variables: {
name: "Charlie"
}
})
在這種情況下,有第一個而不是第二個有問題嗎?
uj5u.com熱心網友回復:
輸入只包含一個鍵是否有問題?
不,相反,它在 GraphQL 中是可取的。雖然嵌套有時看起來是多余的,但它是模式的前向兼容性和可擴展性的關鍵。根據輸入的數量,您不應該對如何設計變異引數有不同的約定。如果您始終使用輸入物件,您可以輕松地棄用現有欄位或添加新的可選欄位并與所有現有客戶端保持兼容。如果你僅僅因為你有一個只有一個鍵的物件就完全改變突變引數的形狀,它會破壞兼容性。
uj5u.com熱心網友回復:
我沒有看到一個問題會驅使你
“僅在處理 Fetching / Get Data 時使用 GraphQL,以及用于變異資料(創建、更新、洗掉)的普通 REST API 請求。”
就像@Bergi 說的那樣。另外,您可以為您的物體提供多個突變器,其中一些可以像 PATCH 或 PUT 請求一樣作業。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/524258.html
