Skip to content

我的第一个OctoMation 应用APP开发

fukui edited this page Oct 5, 2023 · 11 revisions

完整地介绍一个应用开发的整个过程。打开右侧导航栏,阅读效果更好->_->

应用APP开发思路

在你正式编写一款OctoMation应用APP之前,请你想好以下几个问题:

  • 我的应用对接的是何种产品?
  • 应用具备哪些动作?
  • 应用动作有没有查询、写入和通知的特征?
  • 应用是否需要API KEY、密码等信息?
  • 应用输出的格式是什么?
  • 下游产品会用到本应用的哪些输出结果?
  • 应用会不会出错,如何告诉系统?
  • ……

接下来,我们以编写一款IPinfo.io的IP地址地理信息(Geolocation)查询应用为例,介绍如何快速完成你的第一个OctoMation应用APP开发。

IPinfo——值得信赖的 IP 地址数据源。 IPinfo 于 2013 年由前 Facebook 工程师本-道林(Ben Dowling)创立,它以成为目前最可靠、最准确、最深入的 IP 地址数据源而自豪。IPinfo处理数 TB 的数据,生成定制的 IP 地理定位、公司、运营商和 IP 类型数据集。

我们将编写一款应用APP,支持在OctoMation中编排该应用以实现查询IP地理信息,预期的效果是这样的:

image

应用开发辅助工具

让我们正式开始吧!假设OctoMation的地址是https://192.168.0.1/,在你成功登录后使用浏览器访问:https://192.168.0.1/dev即可直接进入图形化应用开发工具的界面。

填写应用基本信息

首先需要我们填写该应用有关的基本信息、应用版本、主文件(此处自定义为:ipinfo.py)和Logo图片等。

image

设置应用资源配置参数

要使用IPinfo网站查询的API必须提供一个身份认证的Token,所以我们在资源配置处增加一个token字段。 image

请注意,该字段属于敏感信息,我们选择其类型为password,且必须填写

image

设置应用动作及初入参

每一个应用有一个或者多个动作,接下来我们将创建一个查询IP地理信息的动作:ip_geolocationimage

该动作有一个必填的入参:ip和多个出参:ip国家区域城市坐标组织邮编时区等。

image

点击预览配置文件(config.json),可以查看工具自动生成的配置文件。您也可以按需编辑配置文件。

image

生成APP主文件

点击应用APP开发界面右上角的按钮【生成主文件】,开发工具将自动生成主文件ipinfo.py

image

编写APP逻辑

系统初始生成的主文件很简单,需要你根据实际需求,用详细的Python代码实现具体逻辑。

image

此处是根据IPinfo官方网站API接口编写的应用查询动作逻辑,代码如下:

# -*- coding: utf-8 -*-
import requests
import json

def get_ip_geolocation(params, assets, context_info):
    """查询IP地址的地理位置"""

    # API Token
    token = assets["token"]
    # IP地址(支持IPv4、IPv6)
    ip = "8.8.8.8" if "ip" not in params.keys() or params["ip"] == "" else params["ip"]

    # 返回值
    json_ret = {"code": 200, "msg": "","data": {"ip": "", "city": "", "region": "", "country": "", "loc": "", "org": "", "timezone": "", "postal": ""}}

    '''添加函数实现
    
    '''
    url = f"https://ipinfo.io/{ip}?dataset=geolocation&token={token}"
    try:
        response = requests.get(url)
        if response.status_code == 200:
            json_info = response.json()
            if 'ip' in json_info.keys():
                json_ret['data']['ip'] = json_info['ip']
            if 'city' in json_info.keys():
                json_ret['data']['city'] = json_info['city']
            if 'region' in json_info.keys():
                json_ret['data']['region'] = json_info['region']
            if 'country' in json_info.keys():
                json_ret['data']['country'] = json_info['country']
            if 'loc' in json_info.keys():
                json_ret['data']['loc'] = json_info['loc']
            if 'org' in json_info.keys():
                json_ret['data']['org'] = json_info['org']
            if 'postal' in json_info.keys():
                json_ret['data']['postal'] = json_info['postal']
            if 'timezone' in json_info.keys():
                json_ret['data']['postal'] = json_info['timezone']
    except Exception as e:
        json_ret['msg'] = str(e)

    return json_ret 

测试APP

完成代码编写后,点击右侧【测试】按钮,可以快速测试应用是否可以在系统中运行。

测试通过后,点击按钮【下载应用】,即可获得应用APP的zip包:shakespeare-action-python-IPinfo.zip

打包上传应用APP

上传应用APP

访问应用APP管理界面https://192.168.0.1/apps,点击【上传应用】按钮,选择文件shakespeare-action-python-IPinfo.zip上传。 image

配置应用APP

在应用列表中找到IPinfo,点击该应用,为其创建一个资源(对应的API Token)。

image

用户也可以根据需要编辑、删除该资源,或配置多个不同的资源。

image

作战室和剧本中使用应用APP

大功告成,现在你可以在作战室或者剧本中使用自己开发的应用了!

因为你,刚刚上传了新的应用APP,浏览器缓存可能没有更新,建议此时刷新一下作战室和剧本编排界面,再开始下面的工作。

作战室中使用应用APP

在作战室输入框左下角,点击【闪电符号】,执行应用动作。搜索IPinfo即可找到。

image

点击应用动作【查询IP地址的地理位置】,输入IP参数,点击【执行】。

image

应用执行完成后,在作战室中可以查看执行的结果。

image

如果你的APP没有经过渲染,那么你看到的很可能是下面的原始数据。

image

剧本编排中使用应用APP

在剧本编排过程中,也可以选择IPinfo应用参与事件响应。

image

🎉🎉🎉恭喜你!终于完成了自己的第一个OctoMation 应用APP开发!


高级技巧

编写应用APP文档

在线测试应用开发结果

渲染应用输出结果

编写单元测试(增强)