本文介绍 API 订阅方应用如何使用 NodeJS 语言发送 HTTP 请求接入网关。
前提条件
在进行本地应用开发前,您需要确保已经完成以下操作:
-
已在 API 网关控制台创建了一个应用 ,参见 创建应用 。
-
已将该应用的 APPID 提供给了 API 发布者,并获得了授权 ,参见 授权 API 。
-
已获取了如下服务配置信息。具体获取方法,参见 获取服务端信息 。
-
应用的访问密钥(Access Key/Secret Key)
-
API 的域名地址(host)、请求路径(path)、方法(method)、请求体(body)
-
操作步骤
发送请求到网关本质上就是一个简单的 HTTP 请求,但是由于当前 API 网关要求订阅方必须加签,所以在发起 HTTP 请求之前,您需要生成一个加签信息,并加入请求 Header 中。
-
从网关获取订阅方应用的密钥(Access Key/Secret Key)。
-
获取 API 的 host、method、path,并组装好必要的参数。
-
引入
sofa-signature-js
,对请求进行加签。-
若拉取不到 sofa-signature-js 则执行
npm i sofa-signature-js
下载。 -
访问 https://www.npmjs.com/package/sofa-signature-js 执行命令 npm 拉取。
-
-
组装请求。
-
使用 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();