javascript 如何在GraphQL Server上接受来自远程服务器的POST请求

cgfeq70w  于 2023-11-15  发布在  Java
关注(0)|答案(2)|浏览(165)

我正在做一个使用GraphQL的项目。我正在集成一个支付处理器,当用户支付成功时,支付处理器向指向我的服务器的webhook URL发送POST请求。现在我想知道如何实现这一点,考虑到GraphQL只暴露一个端点,在我的情况下/graphql。我如何捕获传入的POST请求?为了更好的上下文,
如果我使用的是REST API,在成功支付后,webhook将发送一个POST请求,并将支付数据发送到/payment/verify。但是我如何使用GraphQL服务器实现这一点,将数据从webhook直接发送到我的GraphQL服务器中的解析器?谢谢,期待您的回复。

e4yzc0pl

e4yzc0pl1#

除非支付处理器发送的post请求符合graphql请求的形式。请求的有效载荷必须符合标准的GraphQL AST。只有这样,服务器端的GraphQL才能解析AST,做validationexecution工作。
GraphQL post请求表单是:

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的GraphQL API服务器用于API网关服务。webhook服务是后端服务之一。


的数据

bgtovc5b

bgtovc5b2#

是的,简短的回答是不可能。
要接收一个webhook,你需要一个带有特定主体的POST HTTP端点,graphql使用了不同的主体格式,以“query or mutation”开头,并需要它一个特定的响应,例如:

mutation CreateReviewForEpisode($ep: Episode!, $review: ReviewInput!) {
  createReview(episode: $ep, review: $review) {
    stars
    commentary
  }
}

字符串
而且不可能用简单的方法绘制Map。
我的建议是创建一个简单的HTTP端点来接收webwook请求
例如,使用NestJS(这是我最喜欢的后端框架),您可以创建它。
第一个月
你得到了...


的数据
你可以像这样指定你的端点:

@Controller("webhooks")
export class WebhooksController {
  constructor(private readonly webhooksService: WebhooksService) {}

  @Post("/order-payment/khipu")
  confirmPayment(@Body() confirmPaymentInput: ConfirmPaymentInput) {
    return this.webhooksService.confirmPayment(confirmPaymentInput);
  }
}


其中ConfirmPaymentInput

export class ConfirmPaymentInput {
  @IsString()
  notification_token: string;
}


这样,你就可以接收到webhook的有效载荷。

相关问题