能否解释一下为什么如果变异的输入参数是对象它应该是输入类型?我认为更简单的只是重用类型而不提供id.
例如:
type Sample {
id: String
name: String
}
input SampleInput {
name: String
}
type RootMutation {
addSample(sample: Sample): Sample # <-- instead of it should be
addSample(sample: SampleInput): Sample
}
Run Code Online (Sandbox Code Playgroud)
对于小对象来说没问题,但是当你有很多对象在模式中有10多个属性时会成为负担.
GraphQL 中一个非常常见的用例是创建一个带有突变的对象,并接收完全相同的字段、数据库返回的加号和 ID。这是一个相关的问题,询问这个。
我的问题是,如何简化这种模式以避免重复字段?我试过将输入类型重用为片段,
input ClientInput {
short_name: String
full_name: String
address: String
email: String
location: String
}
type Client {
id: String
...ClientInput
}
Run Code Online (Sandbox Code Playgroud)
...但失败了
语法错误:预期名称,找到...
我在 Fragments 上看到的所有文档和博客文章总是将它们创建on为现有类型。这意味着仍然重复除 ID 字段之外的所有内容:
type Client {
_id: String
short_name: String
full_name: String
address: String
email: String
location: String
}
fragment ClientFields on Client {
short_name: String
full_name: String
address: String
email: String
location: String
}
input ClientInput {
...ClientFields
}
Run Code Online (Sandbox Code Playgroud)
怎么样更好?
我想传递给服务器数组的对象抛出graphqlAPI。
我对架构的查询:
export const schema = buildSchema(`
type Query {
statistics(
modelId: String
picksEnds: [PickEnd]
)
}: Statistics
type PickEnd {
end: String
limit: float
}
...
`)
Run Code Online (Sandbox Code Playgroud)
我在客户端基于 js 的查询:
const createStatisticsQuery = (...) => {
return `query {
statistics(
modelId: "${modelId}",
picksEnds: ${JSON.stringify(myEnds)}
) ...
Run Code Online (Sandbox Code Playgroud)
但出现错误graphql:
消息:“语法错误:预期名称,找到字符串“end””
请求负载中的片段:
{"query":"查询 {\n 统计信息(\n modelId: \"5ca0f4afb88b3a2e006faa0d\",\n picksEnds: [{\"end\":\"home\"},{\"end\":\"绘制\"},{\"end\":\"away\"},{\"end\":\"under\",\"limit\":0.5},{\"end\":\"超过\",\"限制\":0.5},{\"结束\":\"低于\",\"限制\":1.5 ...