首页 > 解决方案 > 如何在 GraphQL 服务器上接受来自远程服务器的 POST 请求

问题描述

我正在做一个目前使用 GrapQL 的项目。我正在集成支付处理器,当用户支付成功时,支付处理器会向 webhook URL 发送一个 POST 请求,该 URL 指向我的服务器。现在我想知道如何实现这一点,考虑到 GraphQL 在我的情况下只公开一个端点/graphql。如何捕获进来的 POST 请求?为了更好的上下文,

如果我使用的是 REST API,则在成功付款后,webhook 会发送一个带有付款数据的 POST 请求到/payment/verify. 但是如何使用 GraphQL 服务器来实现这一点,将数据从 webhook 直接获取到我的 GraphQL 服务器中的解析器?谢谢,期待您的回复。

标签: javascriptnode.jsexpressgraphqlapollo-server

解决方案


除非支付处理器发送的 post 请求符合 graphql 请求的形式。请求负载必须符合标准 GraphQL AST。只有这样,服务器端的 GraphQL 才能解析 AST,进行验证执行工作。

GraphQL 发布请求表单是:

require('isomorphic-fetch');

fetch('http://localhost:4000', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({ query: `
    query {
      todos {
        edges {
          node {
            completed
            id
            text
          }
        }
      }
    }` 
  }),
})
.then(res => res.json())
.then(res => console.log(res.data));

您可以创建额外的路由和端点以用作 webhook,但更好的方法是将 webhook 功能提取到独立的服务中。连接数据库,执行业务逻辑,处理数据。

您只有一个端点的 GraphQL API 服务器/graphql用于 API 网关服务。webhook 服务是后端服务之一。

在此处输入图像描述


推荐阅读