【发布时间】:2020-12-08 01:16:12
【问题描述】:
我有一个如下所示的 GraphQL 查询:
type Query {
getProfile(userId: ID!): UserProfile
}
type UserProfile {
userId: ID!
name: String!
email: String!
street: String!
city: String
country: String!
postal: String!
}
但是,我似乎仅限于使用这样的别名修改来自查询的响应:
query {
getProfile(userId: "12345") {
userId
name
email
streetName: street
city
country
postalCode: postal
}
}
我想重塑响应,这样我就不必通过数据映射器为我的对象放置响应。例如,我可能想要重塑响应,使其看起来像这样:
{
userId: 12345,
name: "John",
email: "john@smith.com",
address: {
streetName: "my street name",
city: "WA",
country: "US",
postalCode: "54321"
}
}
在这种情况下,我在响应中添加了额外的address 级别。我必须在 GraphQL 服务器上专门为这个形状声明一个 type 吗?如果我无权执行此操作,比如说它是第三方 GraphQL API,该怎么办?
感觉我仍然面临着在使用常规 REST API 时必须在 UI 中重新映射响应的问题。在我的情况下,仅使用别名更改字段名称通常是不够的。
如何构建我的 GraphQL 查询以重塑响应以返回不同的形状?
【问题讨论】:
-
我认为 graphql 规范没有结构映射/结构别名之类的东西。你得到它之后必须在 JS 领域对其进行重组,这无论如何都是司空见惯的,比如将结果按 ID 存储在规范化存储中,每个模型分为不同的存储
-
@AndyRay 啊……我明白了。真可惜。我仍然希望 GraphQL 可以消除我对 UI 中数据映射器的需求。 ://
-
恕我直言,在阿波罗中使用链接是可能的...... f.e. rest-link 具有输入补丁或转换请求/响应的工具