我正在制作一个显示有关不同用户的信息的应用程序,该信息取自第三方 API。我将这些信息以我自己的格式保存在 PostgreSQL 中的多个表中,以跟踪对数据的任何更改并提供更改历史记录(第三方 API 仅提供当前数据)。
我想使用 GraphQL,特别是Postgraphile来简化后端开发。但是有一个用例我找不到用 Postgraphile 实现的方法。这是我想要实现的:
- 用户想要查看更新的信息
- GraphQL 变异查询被发送到服务器,如下所示:
mutation UpdateUserData($userid: Int) {
updateUser(id: $userid) {
field1,
field2,
relatedObjects {
field3,
filed3
}
}
}
- 服务器向第三方服务器发出 API 请求,处理数据,进行一些计算并更新数据库
- 请求的字段返回给客户端
我知道这种类型的自定义突变可以用PL/pgSQL或PLV8 之类的数据库函数来实现,但是它们不能发出 http 请求,而且我已经在 Typescript 中拥有了大部分数据处理逻辑,所以想使用它。
有没有办法创建一个自定义突变来调用 JavaScript 函数,该函数可以访问我已经创建的 Node.js 模块、接口和类?
我认为可行的一种解决方案:
- 在我的服务器上调用 REST 端点,例如
/update_user?id=$userid
- 从第三方 API 加载用户数据并更新数据库
- 客户端收到响应,例如
Update successful
- 调用普通的 GraphQL 查询来获取数据
有没有更好的方法来满足这个用例?