阿里云布署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 创建租户网络+实例

中小企业openstack私有云布署实践1 网络拓扑说明

中小企业openstack私有云布署实践5 数据库MariaDB 集群

中小企业openstack私有云布署实践7.2 keystone + memcache (办公网环境)