1

我正在制作一个显示有关不同用户的信息的应用程序,该信息取自第三方 API。我将这些信息以我自己的格式保存在 PostgreSQL 中的多个表中,以跟踪对数据的任何更改并提供更改历史记录第三方 API 仅提供当前数据)。

我想使用 GraphQL,特别是Postgraphile来简化后端开发。但是有一个用例我找不到用 Postgraphile 实现的方法。这是我想要实现的:

  1. 用户想要查看更新的信息
  2. GraphQL 变异查询被发送到服务器,如下所示:
mutation UpdateUserData($userid: Int) {
    updateUser(id: $userid) {
        field1,
        field2,
        relatedObjects {
            field3,
            filed3
        }
    }
}
  1. 服务器向第三方服务器发出 API 请求,处理数据,进行一些计算并更新数据库
  2. 请求的字段返回给客户端

我知道这种类型的自定义突变可以用PL/pgSQLPLV8 之类的数据库函数来实现,但是它们不能发出 http 请求,而且我已经在 Typescript 中拥有了大部分数据处理逻辑,所以想使用它。

有没有办法创建一个自定义突变来调用 JavaScript 函数,该函数可以访问我已经创建的 Node.js 模块、接口和类?

我认为可行的一种解决方案:

  1. 在我的服务器上调用 REST 端点,例如/update_user?id=$userid
  2. 从第三方 API 加载用户数据并更新数据库
  3. 客户端收到响应,例如Update successful
  4. 调用普通的 GraphQL 查询来获取数据

有没有更好的方法来满足这个用例?

4

1 回答 1

0

这部分在文档中有点隐藏,但是添加用 JavaScript 编写的突变最简单的方法是makeExtendSchemaPlugin.

在这里,您可以在 SDL 中定义类型定义并在 JS 中实现解析器。

于 2022-01-23T12:20:56.107 回答