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

更新时间:
复制为 MD 格式

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

服务架构图

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

操作步骤

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

1. 在云市场申请服务(此处使用了免费服务)。

2. 创建函数计算3.0(事件函数)

3. 配置API网关

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

  1. 登录云市场

  2. 在云市场页面,搜索手机号码归属地查询,选择目标服务,单击详情并开通该服务。

    选择深圳华辰网络科技有限公司提供的手机号查询_手机号码归属地查询_手机号码信息查询(限时免费)服务,该服务交付方式为API,可免费试用。

  3. 在商品详情页可看到接口的调用地址为https://ec8a.api.huachen.cn/mobile

    该接口请求方式为GET,返回类型为JSON,支持APPCODEAppKey & AppSecret两种认证调用方式。

  4. 获取认证,并获取到服务的AppCode9b5f1c25ed5e4f3794dd0***********

    已购买的服务页面找到目标服务,页面底部的凭据区域显示AppKeyAppSecretAppCode信息,单击对应的复制按钮即可获取。

步骤二:创建函数计算3.0(事件函数)

  1. 登录函数计算控制台,在左侧导航栏,选择函数管理 > 函数列表

  2. 在顶部菜单栏,选择地域,然后在函数列表页面,单击创建函数

  3. 在弹出的对话框,根据提示和实际场景,选择事件函数类型,然后单击创建{title}

    配置函数名称getMobile地域选择华东1(杭州)。在函数代码区域,运行环境选择Python 3.6代码上传方式选择使用示例代码,选择Hello_World! 示例

  4. 函数详情页签的代码栏下方的在线IDE中配置如下代码,代码配置中的参数值hostpath以及appcode步骤一中获取到的值。

    # -*- coding: utf-8 -*-
    import json
    from urllib.request import Request, urlopen
    
    host = 'https://ec8a.api.huachen.cn'
    path = '/mobile'
    method = 'GET'
    appcode = '9b5f1c25ed5e4f3794dd0***********'
    headers = {'Authorization': 'APPCODE ' + appcode}
    
    def handler(event, context):
        ct = json.loads(event)
        mob = ct['queryParameters']['mob']
        querys = 'mobile='+mob
        url = host + path + '?' + querys
        req = Request(url, headers=headers)
        response = urlopen(req)
        content = response.read().decode('utf-8')
        rep = {
                "isBase64Encoded": "false",
                "statusCode": "200",
                "headers": {"x-custom-header": "no"},
                "body": content
               }
    
        return rep
  5. 单击代码栏下方的测试函数 > 配置测试参数,在配置测试参数框中,填写事件名称和如下参数,单击确定

    {
      "queryParameters": {
        "mob": "18138******"
      }
    }

    其中事件名称填写为mob-test

  6. 单击页面的部署代码测试函数,可看到如下结果,说明创建函数计算服务(事件函数)成功。

    返回结果显示执行成功返回结果页签中可看到JSON响应,其中statusCode200body中包含手机号归属地查询结果(包括运营商、省份、城市等信息),说明函数配置正确。

步骤三:配置API网关

创建后端服务

  1. 登录API网关控制台,选择地域并在左侧导航栏选择API管理 > 后端服务,单击右上角创建后端服务,配置如下信息,单击确定。

    配置名称FC-mobile类型选择函数计算产品版本选择函数计算3.0函数类型选择事件函数

  2. 在后端服务列表页面,单击FC-mobile的后端服务,选择线上,单击右上角创建,选择函数名称为getMobile,单击发布

创建分组

登录API网关控制台,选择地域并在左侧导航栏选择API管理 < 分组管理,单击右上角创建分组,选择API网关实例和填写分组名称mobile-group如下:

BasePath保持默认值/,单击确定完成分组创建。

创建API

  1. 登录API网关控制台,选择地域并在左侧导航栏选择API管理 > 分组管理

  2. 分组列表页面下,单击所创建的mobile-group分组操作列下的API管理,在API列表页面,单击右上角创建API

    1. 基本信息页配置如下信息,单击下一步。

      分组选择mobile-groupAPI名称填写mobile-test安全认证选择无认证

      说明

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

    2. 定义API请求页配置如下信息,单击下一步。

      协议勾选HTTPHTTPS请求Path填写/getInfoHTTP Method选择GET入参请求模式选择入参映射(透传未知参数)。在入参定义中添加一条参数:参数名mob参数位置Query类型String默认值填写手机号(如181384*****)。

      说明

      定义API请求:请求Path是最终暴露给用户的路径。

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

    3. 定义API后端服务页配置如下信息,单击下一步。

      后端配置选择使用已有的后端服务后端服务类型选择函数计算产品版本选择函数计算3.0函数类型选择事件函数后端服务选择FC-mobile后端超时保持默认值10000 ms。在后端服务参数配置中,后端参数名称mob后端参数位置Query,对应入参名称为mob

      说明
      • 建议API网关与函数计算选择在同一区域,以免走公网导致响应时间变长。

      • API网关上设置的超时时间应不小于函数执行的时间,以避免API网关提前终止请求响应。

    4. 定义返回结果栏单击创建。并发布API到线上。

      发布API对话框中,选择发布环境为线上,填写变更备注,单击发布

调试API

  1. 登录API网关控制台,在左侧导航栏选择API管理 > API列表

  2. API列表页面,单击创建的mobile-testAPI 操作列下的调试。在调试页面单击发送请求

    在左侧面板的请求参数(Query)中输入参数mob及手机号值,发送请求后在右侧详细结果页签查看响应。响应状态码为200,响应体返回JSON格式的手机号归属地查询结果,包含运营商、省份、城市等信息。

通过URL地址发送请求

API网关支持绑定自定义域名。如果您有自己的独立域名,您可以登录API网关控制台,在左侧导航栏的API管理 > 分组管理,在分组列表页面单击目标分组后在分组详情页面的独立域名处进行绑定域名。

下面以系统提供的二级域名来简单试验,二级域名可以在分组管理页面查到。

在目标分组的分组详情页面,基本信息区域中的公网二级域名即为系统分配的二级域名(格式如{API分组ID}-cn-hangzhou.alicloudapi.com)。

将地址拼接成完整的请求地址,通过curl命令测试访问效果,示例如下。

curl http://7f32344226ae4e85a82339f8578d732c-cn-hangzhou.alicloudapi.com/getInfo?mob=18138******
{"ret":200,"msg":"success","data":{"num":"1813843","isp":"中国电信","prov":"广东","city":"深圳","types":"中国电信","city_code":"0755","area_code":"440300","zip_code":"518000","lng":"114.057868","lat":"22.543099"},"log_id":"294361f8658247a2991198d7b26b6082"}