我正在使用Facebook Graph API的数据来获取用户信息并在GraphQL服务中创建我的用户(graphcool)。
function createGraphcoolUser(facebookUser) {
return api.request(`
mutation {
createUser(
facebookUserId: "${facebookUser.id}"
facebookEmail: "${facebookUser.email}"
facebookName: "${facebookUser.name}"
facebookPicture: "${facebookUser.picture}"
) {
id
}
}`)
.then((userMutationResult) => {
return userMutationResult.createUser.id
})
}
但是${facebookUser.picture}
是一个具有嵌套字段的对象。
{
"id": "123467890",
"email": "my@email.ca",
"name": "John Doe",
"picture": {
"data": {
"url": "https://url.to.picture.jpg"
}
}
}
那么如何在类型模型中定义它呢?
type User @model {
# Required system field:
id: ID! @isUnique # read-only (managed by Graphcool)
# Optional system fields (remove if not needed):
createdAt: DateTime! # read-only (managed by Graphcool)
updatedAt: DateTime! # read-only (managed by Graphcool)
facebookUserId: String @isUnique
facebookEmail: String
facebookName: String
facebookPicture: ---> HERE <---
posts: [Post!]! @relation(name: "UserPosts")
}
答案 0 :(得分:0)
如果您需要facebookPicture
作为类型,我认为有几种方法可以做到这一点。看起来data
对象只是一个包装器,所以它可以帮助我们将整个事情弄平。
type User @model {
id: ID! @isUnique
facebookUserId: String! @isUnique # unique field should be required
facebookEmail: String
facebookName: String
facebookPicture: FacebookPicture @relation(name: "UserPicture")
posts: [Post!]! @relation(name: "UserPosts")
}
type FacebookPicture @model {
id: ID! @isUnique
user: User! @relation(name: "UserPicture")
url: String!
}
在Graphcool 1.0之前,它会强制关系成为双向关系,因此您必须处理图像中的user
字段。在1.0最终推出后,这可能会变得有点简单。
为了将图像添加到用户,您可以(应该能够)使用nested mutation。类似的东西:
mutation createUserAndFacebookPicture { # this mutation should be generated by Graphcool
createUser(
# user stuff...
facebookPicture: {
url: "${facebookUser.picture.data.url}"
}
) {
id
facebookPicture {
id
url
}
}
}
如果facebookUser.picture.data
更复杂且不仅仅是包装器,那么您可以创建data
字段,并将其设为JSON
类型。
答案 1 :(得分:0)
要回答我自己的问题,信息就在文档中(对不起):
我们必须使用输入类型
...您也可以轻松传递复杂的对象。这是特别的 在突变的情况下很有价值,你可能想传递一个 要创建的整个对象。在GraphQL架构语言中输入 类型看起来与常规对象类型完全相同,但使用 关键字输入而不是类型...