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

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

服务架构图

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

操作步骤

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

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

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

3. 配置API网关

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

  1. 登录云市场

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

    image

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

    image

  4. 获取认证,并获取到服务的AppCode为9b5f1c25ed5e4f3794dd0***********

    image

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

  1. 登录函数计算控制台,在左侧导航栏,单击函数

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

  3. 创建函数页面,选择事件函数,配置以下配置项,然后单击创建

    image

  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

    image

  5. 单击代码栏下方的测试函数 > 配置测试参数,在配置测试参数框中,填写事件名称和如下参数,单击确定

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

    image

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

    image

步骤三:配置API网关

创建后端服务

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

    image

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

    image

创建分组

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

image

创建API

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

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

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

      image

      说明

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

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

      image

      说明

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

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

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

      image

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

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

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

      image

调试API

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

  2. API列表页面,单击创建的mobile-testAPI 操作列下的调试。在调试页面单击发送请求,可看到如下图所示:

    image

通过URL地址发送请求

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

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

image

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

image