发送 HTTP 请求(NodeJS)

发送 HTTP 请求(NodeJS)

更新时间:
一键部署

本文介绍 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 ,对请求进行加签。

    1. 若拉取不到 sofa-signature-js 则执行 npm i sofa-signature-js 下载。

    2. 访问 https://www.npmjs.com/package/sofa-signature-js 执行命令 npm 拉取。

  4. 组装请求。

  5. 使用 HttpClient(fetch、axios 等)发起 HTTP 请求到 API 网关。

NodeJS 代码示例

import {
  Signature,
  SignatureAlgorithm,
  HTTPDigestWithBase64,
  DigestAlgorithm
} from "sofa-signature-js";
import fetch from 'node-fetch';
// api 信息
const gateway = "5jzkcn0idt3w****.apigateway.inc.alipay.net";
const method = "POST";
const path = "/simple/demo";
const headers = {
  'Content-Type': 'application/json'
const body = JSON.stringify({
  name:'jack',
// app ak
const accesskey = "m9hoHiqtjylG****"; 
// app sk
const secretkey = "sxCg1uk6UjGARr1hPswE0W2KHe86****"; 
let digest;
// 为 request body 生成 digest,可以保证 request body 不被篡改
if(method !== 'GET' && method !== 'DELETE'){
   digest = HTTPDigestWithBase64(DigestAlgorithm.HMACSHA256, body);
}else{
   digest = 'SHA-256=47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU='
headers["digest"] = digest;
// 创建加签对象
const sign = new Signature(
  accesskey,
  secretkey,
  SignatureAlgorithm.HMACSHA256,
  signheaders
// signheaders 决定对哪些 header 进行加签
const signheaders = ["(request-target)", "digest"];
// 生成签名
const authorization = sign.doSignature(secretkey, headers, method, path);
// 将签名放到 header
headers["Signature"] = authorization;
// 发起请求
fetch(`${gateway}${path}`,{
  method,
  headers,
.then(function(res) {
  return res.json();