阿里云布署API网关记录
Posted 圆滚滚的胖狸
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了阿里云布署API网关记录相关的知识,希望对你有一定的参考价值。
阿里云ECS上布署了一个API,用来跨不同的客户端做业务协作,然鹅此时全然不知,已经呆呆的掉入深坑。
API布署完毕,也做了相应的跨域设置,但在调用访问时,GET方法,php可以调用,POST方法,PHP调用不成功。到了JS就更悲催,无论如何都调用不成功。
于是调转方向,发现阿里云有API网关功能。果断开通。经过N长时间研读文档。。。终于搞定。
前期工作:最重要的前提的,要将API在web服务器上布署完成。并且调用访问正常。
第一步,购买API网关服务,选择共享实例,收费方式为调用量(计次)
第二步,登录API网关控制台后,首先创建分组
第三步,在分组管理中,绑定域名
注意:域名需要备案成功。域名需要解析到阿里云提供的二级域名上,具体解析方式,参见阿里云帮助文档。
第三步,登录阿里云SSL证书控制台,购买SSL证书。我的API域名已经绑定了一个免费的SSL证书,再多加一个免费证书,则需要购买免费证书扩展包
第四步,申请证书,布署到域名。注意:这里的域名,是在API网关绑定的域名。具体布署详见阿里云的帮助文档。布署完成后,记住证书名称
第五步,回到API网关控制台,分组管理,点选分组名称,进入分组详细信息
在此页面中上传SSL证书
第六步,创建API
(自己踩的坑:刚开始觉得OpenID方式简单,所以选择OpenID,然后才发现需要JWT。暂时没搞明白JWT,所以后来又回到AppCode,选择了最简单的调用方式。如果是正式上架,OpendID还是比较好的选择)
如果不开启AppCode,则需要客户端添加生成证书的方法,阿里云提供了PHP,python,Java,.net,node.js这几种语言的SDK,其它语言,比如JS,则需要自己编写。
点击保存即完成了一个API,接下来就是发布,可以直接发布到线上环境。
到此时API发布完毕,但现在并不能调用
第七步,我们回到API网关控制台,点击左侧的调用API-应用管理,创建APP。这里的APP并不是指安卓下的APP,而是指任何互联网应用。自己定义就可以。阿里云会为APP分配APPID,APPSecrect和APPCODE
创建完成后,点击APP名称,进入APP详情页面,此时详情页中已授权的API为空,但APPID和APPCODE都已经出现了。
我们再点击左侧的API列表,点击API名称进入详情而,然后点击左侧的授权信息,进入授权页面。
点击右上角添加授权
选择环境,有效期,点击搜索则可以看到已经创建的APP,点击添加并且确定
到此时,发布工作基本完成
第八步,我们返回API列表,点击API右侧的调试,即可以开始测试API,如果发布的有问题,则可以选择编辑,重新调整参数等。
调试页面的左半部分
填写完成后点击发送请求,则右边调试窗口出现以下内容则为正确
注意respone为200,则从API服务器得到了我们想要的值,即为正常调用。将此页面中的request复制下来。整理为json格式,一会儿做JS调用时我们会用到。
特别说明:如果是POST请求,调试中有一点要注意
此时调试成功,API已经可以使用。
阿里云提供了一些SDK的下载,在网关控制台左侧,调用API中选择已授权的API SDK,可以看到这些SDK,并且下载使用。
阿里有提供了node.js的SDK,但我的API使用者要求简单的js ajax调用,于是按照阿里云的帮助文档,参考之前复制的request请求,写出了如下代码
const appId = '业务appid';
const appSecrect = '业务appSecrect';
const aliAppKey = '阿里云应用appId';
const aliApkkSecrect = '阿里云应用appSecrect';
const aliAppCode = '阿里云应用 APPCODE ';
const aliContentType = "application/json; charset=utf-8";
const aliAccept = "application/json; charset=utf-8";
const aliHost = "wx.api.services.wxjytech.net";
let aliNonce = guid();//js生成guid的方法自行百度
let aliTimestamp = (new Date()).valueOf();
//以下为GET请求
let $url = `https://xxx.abc.net/api/$appId/$appSecrect/GetToken`;
let $headers =
"Authorization": aliAppCode, //appcode
"X-Ca-Timestamp": aliTimestamp, //时间戳
"gateway_channel": "http",
"X-Ca-Key": aliAppKey,//阿里云应用appid
"x-ca-nonce": aliNonce, //nonce,阿里云要求,uuid或者是guid
"Content-Type": aliContentType,
"Accept": aliAccept
$.ajax(
headers:$headers,
type: "GET",
url: $url,
success: function (data, status)
if (status == "success")
var appToken = data.token;//业务token
);
//GET请求结束
//以下为POST请求
let userinfo =
//定义要提交的业务数据
;
let $url= "https://xxx.abc.net/api/SaveWxInfo"
let $headers=
"Authorization": aliAppCode,
"X-Ca-Timestamp": aliTimestamp,
"gateway_channel": "http",
"X-Ca-Key": aliAppKey,
"x-ca-nonce": aliNonce,
"Content-Type": aliContentType,
"Accept": aliAccept
let $data =
"appId": appId,
"appToken": appToken,
"data":[userinfo]
let $body = JSON.stringify($data);
$.ajax(
headers:$headers,
data:$body,
type: "POST",
url: $url,
success: function (data, status)
if (status == "success")
console.log(data);
);
POST请求与GET请求,header部分一样,type为POST,data为bodycontent
至此,在阿里云控制台的工作基本上做完了,总结一下:
一、首先要将写好的API发布到互联网,确保在互联网可以访问
二、申请开通阿里云API网关
三、在API网关控制台发布API
四、在API网关控制台创建APP,并且为API授权
五、使用SDK或者阿里云的调用规则,调用API
六、采用APPCODE的简单调用,一定要使用HTTPS
阿里云API网关没有跨域的问题,原则上支持所有的跨域访问。
参考文档
https://help.aliyun.com/document_detail/29464.html?spm=a2c4g.11186623.6.542.643d45a9Y6qj1P
以上是关于阿里云布署API网关记录的主要内容,如果未能解决你的问题,请参考以下文章
中小企业openstack私有云布署实践18 修改实例DHCP服务的DNS IP
中小企业openstack私有云布署实践19 通过python客户端 启动实例时手工指定固定的IP地址
中小企业openstack私有云布署实践15 创建租户网络+实例