全部产品
阿里云办公

搭建无服务器应用之手机号归属地查询

更新时间:2018-03-16 11:46:51

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

服务架构图

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

Framework

操作步骤

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

  1. 云市场服务购买,此处使用了免费服务。
  2. 编写函数代码。
  3. 设置API网关。调试成功就可以开放API地址了。

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

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

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

第二步:设置函数计算

  1. 创建一个服务。

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

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

  2. 创建空白函数。

    选用Python2.7编译环境,设置执行时间:1500ms,执行的内存128MB,因为是调用云市场的接口来取到内容,该接口平均响应时间在1200ms左右。

    其中函数代码块:

    1. import logging
    2. import urllib, urllib2, sys
    3. import ssl
    4. import json
    5. def handler(event, context):
    6. ct = json.loads(event)
    7. mob = ct['queryParameters']['mob']
    8. #return ct
    9. host = 'http://jshmgsdmfb.market.alicloudapi.com' #market aliyun provider
    10. path = '/shouji/query'
    11. method = 'GET'
    12. appcode = 'your appcode'
    13. querys = "shouji="+ mob
    14. bodys = {}
    15. url = host + path + '?' + querys
    16. request = urllib2.Request(url)
    17. request.add_header('Authorization', 'APPCODE ' + appcode)
    18. response = urllib2.urlopen(request)
    19. content = response.read()
    20. rep = {
    21. "isBase64Encoded": "false",
    22. "statusCode": "200",
    23. "headers": {
    24. "x-custom-header": "no"
    25. },
    26. "body": content
    27. }
    28. return json.dumps(rep)
  3. 通过控制台调试程序。

    如果想在控制台进行对程序调试,可以在执行页面的触发事件中加入模拟API网关invoke函数请求串:

    1. {
    2. "body": "",
    3. "headers": {
    4. "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
    5. "X-Ca-Api-Gateway": "48351B11-52DB-44EE-8051-CE22A2F69A1C",
    6. "X-Forwarded-For": "100.68.30.243"
    7. },
    8. "httpMethod": "GET",
    9. "isBase64Encoded": false,
    10. "path": "/getinfo",
    11. "pathParameters": {},
    12. "queryParameters": {
    13. "mob": "13622439310"
    14. }
    15. }

第三步:设置API网关

  1. 创建API分组。

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

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

  2. 创建API。

    在API网关控制台上,根据页面指示,完成4步操作,创建API。具体操作请参考创建API

    注意:填写信息时,为了演示效果,此处选择了不认证。一般对外的分组建议都选用阿里云APP认证,确保API请求安全和计量统计。

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

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

    createAPI

    定义API后端服务:后端服务类型需选择FunctionCompute;Service和Function填入之前在函数计算中设置好的参数。

    注意:

    1. 建议API网关与函数计算选择在同一区域,以免走公网响应时间变长。
    2. API网关上设置的超时时间应不小于函数执行的时间,以避免API网关提前终止请求响应。

    createapi2

  3. 返回结果示例。

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

    1. {
    2. "status": "0",
    3. "msg": "ok",
    4. "result": {
    5. "province": "浙江",
    6. "city": "杭州",
    7. "company": "中国移动",
    8. "cardtype": "GSM"
    9. }
    10. }
  4. 测试执行效果。

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

    test

通过URL地址发请求

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

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

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

URLquery

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

browser