本文主要介绍配合使用API网关、函数计算和云市场三种产品,搭建一个可以查询手机号归属地的服务。在这个框架里不需要配置WEB容器、不需要搭建运行环境、不需要购买负载均衡,通过配置和一段代码即可完成一个高扩容无服务器的应用服务。

服务架构图

API网关+函数计算+云市场

操作步骤

此架构的搭建可以分为三部分:

1. 云市场服务购买,此处使用了免费服务。

2. 编写函数代码。

3. 设置API网关。调试成功就可以开放API地址了。

第一步:在云市场申请服务

  1. 登录云市场
  2. 搜索查找应用手机号码归属地查询

  3. 开通该服务,并获取到服务的AppCode。

第二步:设置函数计算

  1. 创建一个服务。

    在函数控制台上创建一个服务,填写名称和备注。具体操作请参考函数计算创建服务

    若您已有函数服务,可以忽略这一步。

  2. 创建空白函数。

    选用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)			
  3. 通过控制台调试程序。

    如果想在控制台进行对程序调试,可以在执行页面的触发事件中加入模拟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网关

  1. 创建API分组。

    在API网关控制台上,创建API分组。具体操作请参考创建API分组

    如果已有分组,可以忽略这一步。

  2. 创建API。

    在API网关控制台上,根据页面指示,完成4步操作,创建API。具体操作请参考 创建API
    说明 填写信息时,为了演示效果,此处选择了不认证。一般对外的分组建议都选用阿里云APP认证,确保API请求安全和计量统计。

    定义API请求:请求的Path即使最终暴露给客户的路径。

    入参定义:需定义入参名,传入手机号。本例中设置入参名为mob。

    定义API后端服务:后端服务类型需选择FunctionCompute;Service和Function填入之前在函数计算中设置好的参数。
    说明
    1. 建议API网关与函数计算选择在同一区域,以免走公网响应时间变长。
    2. API网关上设置的超时时间应不小于函数执行的时间,以避免API网关提前终止请求响应。

  3. 返回结果示例。

    参考手机号归属地提供商的返回值,填写到API网关中,代码如下:

    {
      "status": "0",
      "msg": "ok",
      "result": {
        "province": “浙江”,
        "city":“杭州”,
        "company": “中国移动”,
        "cardtype": "GSM"
      }
    }
  4. 测试执行效果。

    调试API页面,在请求串里填写手机号,执行后,即可看到手机号归属地的返回。

通过URL地址发请求

API网关支持绑定自定义域名。如果您有自己的独立域名,您可以在API网关控制台 > 分组管理页面进行域名绑定。

下面以系统提供的二级域名来简单试验。如下图,把地址拼接完整的请求地址,通过浏览器试验访问效果。

二级域名可以在分组管理页面查到:

在浏览器请求的演示效果: