我正在构建一个由几个不同对象组成的SaaS B2B应用程序。例子:
- 用户
- 客户
- 库存Itens
- 库存水平
- 价目表
- 销售
- 返回
- 等。。。
我将有大约 40 个不同的对象,可以单独列出和创建、编辑和删除。
第一次面对 GraphQL 概念,我应该为所有对象构建一个大型模式,如下例所示,还是应该将每个对象保留在自己的查询中。
query {
viewer {
Users {
id
firstName
lastName
address
city
...
}
Customers {
id
firstName
lastName
address
city
rating
...
}
StockItens {
id
item_id
sales {
id
dateTime
qty
unitValue
totalValue
...
}
...
}
StockLevels {
...
}
PriceList {
...
}
Sales {
id
dateTime
qty
unitValue
totalValue
...
}
Returns {
...
}
}
}
寻找第一个选项(将所有内容保留在一个查询中)被认为是合乎逻辑的,因为我将使用片段来访问所需的信息,但随后我将拥有一个包含大量相互关系的巨大模式。
请提供该用例的最佳实践建议。
我建议您不要编写添加所有所需数据的查询,而是使用您已经指出的片段概念。
并且您仅获取当前页面所需的数据。因此,吞吐量保持在最低水平。
例如如果您有一个更新用户的页面,您只需在专用查询中获取该用户的所需数据。查询由片段组成。片段与页面中使用的子组件相关,例如显示用户数据的表单。表单片段定义它需要从用户获得的数据,更新页面将这些片段合并到查询中。
// in user form component
const userFormFragments = {
name: "UserForm",
document: `fragment UserForm on User {
id
name
}`
};
// in update user page
const userQuery = `query getUserQuery($userId: ID!) {
getUser(userId: $userId) {
...${userFormFragment.name}
}
${userFormFragment.document}
}`