相信大家对于云服务并不陌生,而本次我们要做的就是将本地的API接口转存至Serverless并重新部署,绑定新域名,减轻我们的服务器负担,减少运行堵塞。由于网络空间测绘平台的域名还在备案,所以我就先将API接口上传到Serverless上。

API接口上云|Serverless云函数服务部署实战插图

服务选择

由于上次参加腾讯云举办的性能检测竞赛,我不经意间看到了腾讯云的云函数服务优惠,可以说是相当给力:就一个小站而言,一个月只需要几元甚至免费的价格,非常划算,所以我选择使用了腾讯云的函数服务。

API接口上云|Serverless云函数服务部署实战插图1

云函数创建

地区选择

这里我的API接口使用PHP编写,所以在后续的配置方面与Node和python相比比较麻烦

首先,选择我们创建云函数服务的地区。因为我们并没有对用户地区的要求,所以这里我选择的是广州。如果你有海外用户,可以选择到新加坡、硅谷等地区。

API接口上云|Serverless云函数服务部署实战插图2

本次创建的属于API接口,所以在函数类型上我选择事件函数。这里简单解释一下:事件函数可以被任意触发器触发,而Web函数在后续创建API网关的类型时,只能选择WSS访问,并且需要更改业务接口

编写函数代码

选择函数所需要的的运行环境,包含javapython,go以及node,我选择PHP 7.2这个环境。为了以后便于维护API接口,所以我们分批上传代码文件,或者自己手动编写函数。执行方法就对应着我们 所要运行的函数。

API接口上云|Serverless云函数服务部署实战插图3

对于这个云函数的执行方法,最开始还是把我弄得一头雾水,自己琢磨了好半天,最后还是通过官方给出的技术文档和调试解决了传参问题。

所以,为了让大家避这个坑,这里为大家简单解释下这个执行方法的参数和运行问题。

例如官方给出的函数例子:

<?php

$gl = 1;

function main_handler($event, $context) {
    global $gl;
    print "good";
    print " job ";
    print $gl;
    print "\n";
    $gl += 1;
    error_log( "Hello, errors!" );
    var_dump($event);
    var_dump($context);

    return "hello world";
}

?>

其中,bodyheaderqueryString等参数都是传入了$event中,所以这里的$event相当于取代了$_GET[''],来获取传入的参数,例如namepassword等。

再详细一点,例如$_GET['url'],来获取传入的url参数的值,而这里我们需要将它替换为 :

$event['queryString']['url'](建议先对$event使用json_decode(json_encode($event), true),方便后续的取值)

触发器创建

这里需要注意一点,如果你要让你的API接口可以公共访问,那么你就需要在触发方式上选择API网关触发,并规定请求方式和发布环境等等。

API接口上云|Serverless云函数服务部署实战插图4

创建完毕后,我们就可以在访问路径处看到当前函数的访问地址,如下图所示:

API接口上云|Serverless云函数服务部署实战插图5

API网关配置

在创建完云函数后,我们还需要对云函数绑定的API网关进行配置。大致流程和云函数创建相差不多,首先还是选择地区创建。这里需要注意,如果我们选择中国大陆以外的区域,腾讯云是要额外收取费用的,不过可以绑定未备案域名。如果没有什么其他的需求,选择华东、华南和华北的地区就行。

API接口上云|Serverless云函数服务部署实战插图6

前端配置

例如我这里的API网关配置,添加参数配置和请求方法以及跨域。

API接口上云|Serverless云函数服务部署实战插图7

这里参数设置对应刚才云函数中请求的参数,以及响应结果的返回类型配置,默认创建网关后的返回类型应该都是JSON。如果需要其他类型,可以在API编辑中修改。

API接口上云|Serverless云函数服务部署实战插图8

域名绑定

这里我们在API管理中心,绑定了自定义域名。国内的API网关对于域名的要求是备案,如果没有备案又想要绑定自己的域名,那就只有选择国外的API网关地区。

API接口上云|Serverless云函数服务部署实战插图9

并且API网关可以自定义配置协议和SSL证书,以及路径映射。

结语

本次我将网络空间测绘平台的API接口已经全部搬迁到了Serverless上,非常方便,而且可以很清楚地看到API的调用次数以及运行情况,后续的小程序开发和更新,大部分也要用到云函数