【问题标题】:Is GraphQL overkill for my node express backendGraphQL 对我的 node express 后端来说是否矫枉过正
【发布时间】:2021-10-04 16:32:15
【问题描述】:

我有一个 PostgreSQL 数据库,其中包含不同实体/表之间的各种关系。例如。老师和学生,老师和教室,学生和班级。在我的(快速)后端*中,我发现自己编写了很多乏味的路由来提取数据——这些路由进行类似但略有不同的 SQL 查询(我们使用 sequelize),例如

  • 根据年龄获取学生
  • 根据学校获取教师
  • 让所有与特定老师一起学习的学生
  • 让所有教授特定学生的老师
  • 获取在特定时间段内上课的所有学生
  • 获取在特定时间和特定老师上课的所有学生。

当然,最后两个可以通过在没有教师约束时传递 null 来轻松合并到一个 REST 端点。尽管如此,还有更多的排列,而且这个数字只会随着新实体的增加而增长。

为了加快开发速度,我想知道 (i) GraphQL 是否能给我们带来任何好处(我们今天有大约 30 条路线)(ii) 是否甚至可以设置和使用 GraphQL 以以某种方式无需做大量样板工作即可连接到我的 postgreSQL(和 r​​edis)数据库。

我查看了 Apollo 文档 (https://www.apollographql.com/docs/tutorial/data-source/),并查看了 SQLDataSource (https://github.com/cvburgess/SQLDataSource),看来我仍然需要为我的每个场景编写/公开端点 - 例如如果我想找出哪些学生有哪些老师,我仍然需要编写一个手动 SQL 查询来执行此操作并将其作为 SQLDataSource 对象上的方法公开。我想我在这里误解了一些东西,因为我认为这是 GraphQL 的关键价值主张。

非常感谢!

*我们今天只有一项服务,但很快就会添加另一项服务

【问题讨论】:

    标签: api rest graphql microservices apollo-client


    【解决方案1】:

    根据您的要求,我只看到三个端点,一个具有很少的查询参数但没有那么复杂,例如:

    GET /students
    GET /students?birthdate=<birthdate_year>
    GET /students/<student_id>/teachers
    GET /students?class_dtstart=<dtstart>&class_dtend=<dtend>
    GET /students?class_dtstart=<dtstart>&class_dtend=<dtend>&teacher_id=<teacher_id>
    
    GET /schools/<school_id>/students
    
    GET /teachers/<teacher_id>/students
    

    我认为您可以使用一些参数来玩几个端点,以在经典的 rest api 模式中构建您想要的查询。显然,您需要编写 somo 代码来将 que 路由参数转换为您的 SQL 查询,但我认为这不是很复杂。

    【讨论】:

      猜你喜欢
      • 2011-04-14
      • 2014-10-31
      • 2013-01-10
      • 1970-01-01
      • 2012-07-06
      • 2011-03-10
      • 2012-06-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多