6月5日,阿里云的API网关上线了一个新功能,用户定义API后端服务时可以选择使用Function Compute,这样API网关的用户直接使用函数计算的技术能力,这也使得API网关具备可扩展的后端应用,与此同时函数计算也享受到API网关带来的诸多的好处,例如API的请求流量管控、安全鉴权、访问监控、统计等等。
整个这个架构搭建分三部分设置,云市场服务购买(免费),编写函数代码,设置API网关,调试成功就可以开放API地址了。
进入云市场选择手机号归属地查询(免费)服务,开通该服务,获取到服务的APPCode,填写到对应的代码中。
第一步:创建一个服务
直接在函数控制台上创建一个服务,填写名称和备注,或者选择已有的服务,直接略过这步。
第二步:创建空白函数,选用Python2.7编译环境,设置执行时间:1500ms,执行的内存128MB,因为是调用云市场的接口来取到内容,该接口平均响应时间在1200ms左右。
其中函数代码块:import logging
import urllib, urllib2, sys
import ssl
import json
def handler(event, context):
ct = json.loads(event)
mob = ct['queryParameters']['mob']
#return ct
host = 'http://jshmgsdmfb.market.alicloudapi.com' #market aliyun provider
path = '/shouji/query'
method = 'GET'
appcode = 'your appcode'
querys = "shouji="+ mob
bodys = {}
url = host + path + '?' + querys
request = urllib2.Request(url)
request.add_header('Authorization', 'APPCODE ' + appcode)
response = urllib2.urlopen(request)
content = response.read()
rep = {
"isBase64Encoded": "false",
"statusCode": "200",
"headers": {
"x-custom-header": "no"
},
"body": content
}
return json.dumps(rep)
第三步:通过控制台调试程序:
如果想在控制台进行对程序调试,可以在执行页面的触发事件中加入模拟API网关invoke函数请求串:
{
"body": "",
"headers": {
"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
"X-Ca-Api-Gateway": "48351B11-52DB-44EE-8051-CE22A2F69A1C",
"X-Forwarded-For": "100.68.30.243"
},
"httpMethod": "GET",
"isBase64Encoded": false,
"path": "/getinfo",
"pathParameters": {},
"queryParameters": {
"mob": "13622439310"
}
}
第一步:建立分组:如果没有分组,创建一个分组,如果有,直接略过,看下一步,创建API
第二步:建立API,通过引导页面,完成4步操作,填写基本信息的时候,这个地方为了演示效果,选着不认证,一般对外的分组建议都选用阿里云APP认证,确保API请求安全和计量统计。
定义API请求:请求的Path就是你最终暴露给客户的路径,另外入参定义里,需要填写一个入参名,本例中设置mob,传入一个手机号,见下图:
定义API后端服务的时候,需要选择FunctionCompute的类型,填写的Serivce和Function都是事先在函数计算中设置好,这个地方填写进去即可,
注意两点:
1、你API网关所在的区域跟函数计算的区域同一个,避免走公网响应时间变长
2、在API网关上设置的超时时间不小于你函数执行的时间,避免API网关提前终止请求响应。
第三步:返回结果示例:
参考手机号归属地提供商的返回值,填写到API网关中,代码如下:
{
"status": "0",
"msg": "ok",
"result": {
"province": "浙江",
"city": "杭州",
"company": "中国移动",
"cardtype": "GSM"
}
}
第四步:测试执行效果
点击调试API页面,在请求串里填写手机号,执行后,即可看到手机号归属地的返回。
通过URL地址发请求效果:
在API网关中,如果自己有域名,在分组中设置自己的域名,也可以通过系统提供的二级域名来简单试验一下,看下图,把地址拼接完整的请求地址,可以通过浏览器试验一下效果如何。
在分组详情中可以查到二级域名:
在浏览器请求的演示效果: