全部产品

发送 HTTP 请求(NodeJS)

更新时间:2020-10-22 11:23:38

本文介绍 API 订阅方应用如何使用 NodeJS 语言发送 HTTP 请求接入网关。

前置条件

在进行本地应用开发前,您需要确保已经完成以下操作:

  • 已在 API 网关控制台创建了一个应用,参见 创建应用
  • 已将该应用的 APPID 提供给了 API 发布者,并获得了授权,参见 授权 API
  • 已获取了如下服务配置信息。具体获取方法,参见 获取服务端信息
    • 应用的访问密钥(Access Key/Secret Key)
    • API 的域名地址(host)、请求路径(path)、方法(method)、请求体(body)

操作步骤

发请求到网关本质上就是一个简单的 HTTP 请求,但是由于当前 API 网关要求订阅方必须加签,所以在发起 HTTP 请求之前,您需要生成一个加签信息,并加入请求 Header 中。

  1. 从网关获取订阅方应用 的密钥(Access Key/Secret Key)。
  2. 获取 API 的 host、method、path,并组装好必要的参数。
  3. 引入 sofa-signature-js,对请求进行加签。
  4. 组装请求。
  5. 使用 HttpClient(fetch、axios 等)发起 HTTP 请求到 API 网关。

代码示例

  1. import {
  2. Signature,
  3. SignatureAlgorithm,
  4. HTTPDigestWithBase64,
  5. DigestAlgorithm
  6. } from "sofa-signature-js";
  7. import fetch from 'node-fetch';
  8. // api 信息
  9. const gateway = "5jzkcn0idt3w4czs.apigateway.inc.alipay.net";
  10. const method = "POST";
  11. const path = "/simple/demo";
  12. const headers = {
  13. 'Content-Type': 'application/json'
  14. };
  15. //开启数据加密后,在调用请阅的 API 时必须传入应用的 AK 和 SK 完成加签。
  16. // app ak
  17. const accesskey = "m9hoHiqtjylGjqXC";
  18. // app sk
  19. const secretkey = "sxCg1uk6UjGARr1hPswE0W2KHe86YvhX";
  20. // 为 request body 生成 digest,可以保证 request body 不被篡改
  21. const digest = HTTPDigestWithBase64(DigestAlgorithm.HMACSHA256, body);
  22. headers["digest"] = digest;
  23. // 创建加签对象
  24. const sign = new Signature(
  25. accesskey,
  26. secretkey,
  27. SignatureAlgorithm.HMACSHA256,
  28. signheaders
  29. );
  30. // signheaders 决定对哪些 header 进行加签
  31. const signheaders = ["(request-target)", "digest"];
  32. // 生成签名
  33. const authorization = sign.doSignature(secretkey, headers, method, path);
  34. // 将签名放到 header
  35. headers["Signature"] = authorization;
  36. const body = JSON.stringify({
  37. name:'jack',
  38. });
  39. // 发起请求
  40. fetch(`${gateway}${path}`,{
  41. method,
  42. headers,
  43. body
  44. })
  45. .then(function(res) {
  46. return res.json();
  47. })