我正在尝试使用Node,Sequelize和mySQL建立一个GraphQL服务器。我以前在REST API上做过一些工作但是对GraphQL不熟悉,因此经验有限,并担心意外采用不良做法。
我有三张桌子:events,event_days和参与者。活动有很多天,活动也有很多与会者。我已经设置了架构,以便我可以查询并获取事件列表及其相关日期和与会者。例如:
{
events {
name,
venue,
attendees {
name
}
days {
date,
start_time
}
}
}
我还可以在'events'行添加'id'参数来返回特定事件。一切都很简单。我希望能够做的是运行查询以查找某一天的所有事件或由名为“John”等的人参加。如果我在'days'字段名称之后添加参数(如下面的示例所示) )或'参与者'字段名称然后查询失败,说这些不是接受的参数。在某些方面,这似乎是最合乎逻辑的,因为它是在关系上附加参数而不是根查询,但它反复失败,尽管我尝试了各种不同的方式,所以我想知道参数是否只应该附加到'events'行查询和其他字段名称是JUST什么是要返回?这甚至是将这些参数用于良好实践(甚至可能)的“正确”位置吗?试图像这样实现它的部分原因是我想知道Sequelize(或某些中间件)是否可以解释查询附加到哪个字段,然后根据该字段构建查询。
{
events {
name,
venue,
attendees {
name
}
days ( date: ’2017-07-24' ) {
date,
start_time
}
}
}
我提出了两种选择,但我不确定哪种方法是正确的做法。当我创建REST API时,我发现了许多良好实践指南,但这些似乎不适用于GraphQL。
备选方法1 :设置几个可用参数(id,date,attendee等),这些参数不一定会查询事件表本身,但也会查询其中一个相关表,然后解释这些参数参数并在服务器端构建查询。这似乎是一种很好的方法,但如果我需要根据传递的参数设置完全不同的搜索,它可能会很快失控。
{
events ( date: ’2017-07-24' ) {
name,
venue,
attendees {
name
}
days {
date,
start_time
}
}
}
备选方法2 :在专门设计用于对该关系进行搜索的事件下进行子查询
{
events {
searchByDate (date: ‘2017-07-24') {
name,
venue,
attendees {
name
}
days {
date,
start_time
}
}
findAll {
...
}
}
}