阿里云首页 SOFAStack API 统一网关

发送 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,对请求进行加签。

  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'
};


// app ak
const accesskey = "m9hoHiqtjylG****"; 
// app sk
const secretkey = "sxCg1uk6UjGARr1hPswE0W2KHe86****"; 


// 为 request body 生成 digest,可以保证 request body 不被篡改
const digest = HTTPDigestWithBase64(DigestAlgorithm.HMACSHA256, body);
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;


const body = JSON.stringify({
  name:'jack',
});

// 发起请求
fetch(`${gateway}${path}`,{
  method,
  headers,
  body
})
.then(function(res) {
  return res.json();
})