首页 > 其他分享 >任务系统之API子任务

任务系统之API子任务

时间:2024-02-28 11:13:52浏览次数:21  
标签:get 系统 headers 任务 API type authorization

日常运维工作中有许多的任务要执行,例如项目发布/数据备份/定时巡检/证书更新/漏洞修复等等,大部分的任务都会有多个步骤共同完成,例如一个发布任务会有拉代码、编译、分发、通知等等步骤,而不同的任务可能还包含相同或相似的步骤,例如对于相同语言相同架构的不同项目来说,他们的发布任务步骤可能是相同的,仅仅是几个参数不同而已,为此我们上线了任务系统,任务系统可以像乐高搭积木一样组合不同的步骤(也就是子任务)为一个模板,然后基于模板配合参数来创建任务并执行,灵活且高效

其中子任务的类型越丰富则上层模板的组合方式就会越多样,从而最终的任务覆盖场景就能越全面,目前任务系统子任务的类型已经支持了命令、脚本、作业、Jenkins、审批、通知、API、告警策略和事件规则,之前有篇文章任务系统之Jenkins子任务介绍过Jenkins类型子任务的实现,那这篇文章来介绍下另一个很重要的子任务类型:API

API的使用场景非常之广,在现代的Web系统中绝大部分的操作都可以由API来完成,任务系统对API类型子任务的支持不仅使得任务系统的覆盖场景更加的全面,同时也使得API的调用更加的方便和安全。在未支持API类型子任务之前,任务系统都是通过脚本类型子任务由用户自己编写脚本来实现API调用的,这种方式虽然可用但存在问题,其一是因为写脚本对用户有一定的能力要求,同时增加了复杂度,其二也更为关键的是不安全,API往往需要验证,验证内容写在脚本中,脚本明文存储在数据库中,增加了安全风险,集成API类型子任务可以完美解决这两个问题

API类型子任务的使用方式很简单,只需要三步,第一步新建API,第二步新建API类型的子任务,这里选择第一步创建的API,第三步在任务模板中添加第二步创建的子任务,然后就可以新建任务执行了。其中第二第三步是任务系统的通用流程,这里重点说下第一步关于API的创建,API与Jenkins一样是作为一个插件存在于系统中的,由独立的API管理页面

点击右上角添加按钮之后就可以添加新的API了,创建表单主要包含名称、请求、参数和成功条件四块内容

名称就是个输入框,标识这个API的名称,清晰易理解就好

请求和参数用来配置这个API的主要属性,包含了Method、URL、Parameters、Body、Headers、Cookies和Authentication认证方式配置,页面参考了Postman的设计。其中认证方式的话支持Basic、BearerToken和APIKey,后续也可以根据需要新增更多的认证方式,甚至直接接入多云的认证,实现云上API的便捷使用,以弥补多云系统的不足

前后端通过JSON格式实现数据交互,前端根据输入的请求和参数组装成JSON格式提交给后端,后端则根据认证方式加密对应的密码或Token字段并保存到数据库,当任务请求发起时从数据库获取JSON数据并解密,解析解密后的JSON数据调用Requests模块请求并获取结果

最后一块是判断API是否请求成功的规则集,默认情况下会判断API的返回状态码,如果状态码为2xx或者3xx都认为是成功的,当然用户也可以根据状态码或是响应体自定义成功的规则,例如某些情况下你可能仅需要API返回200表示成功,或者是响应体里的state字段为1算成功,都可以通过自定义灵活的配置。判断API是否请求成功很重要,在一个任务流中,某个步骤的成功与失败直接影响后续步骤的执行,API也不例外,当API任务执行失败时则终止任务流程的执行

前端组装好的JSON格式参考如下

{
  "name": "获取Github仓库blog的branches",
  "api": {
    "method": "GET",
    "url": "https://api.github.com/repos/ops-coffee/blog/branches",
    "parameters": [],
    "body": "",
    "headers": [{"name": "Content-Type", "note": "", "type": "string", "value": "application/json"}],
    "cookies": [],
    "authorization": {
      "type": "Bearer",
      "bearer_token": "ghp_3dtK****************IIcN",
    }
  },
  "success": [
    {"key": "status_code", "type": "状态码", "value": ["200"], "operator": "匹配"}, 
    {"key": "name", "type": "响应体", "value": "main", "operator": "等于"}
  ]
}

后端加解密的方法可以参考文章Model字段加密的优雅实现,Request请求则比较简单

# 不同的认证类型使用不同的请求方式
if authorization.get("type", "").lower() == "basic":
    auth = (authorization.get("basic_username", ""), authorization.get("basic_password", ""))
    response = requests.request(method, url, params=parameters, headers=headers, cookies=cookies, auth=auth,
                                data=body)

else:
    if authorization.get("type", "").lower() == "bearer":
        headers["Authorization"] = "Bearer " + authorization.get("bearer_token", "")

    elif authorization.get("type", "").lower() == "apikey":
        headers[authorization.get("api_key_key")] = authorization.get("api_key_value", "")

    response = requests.request(method, url, params=parameters, headers=headers, cookies=cookies, data=body)

# 解析Response结果判断是否成功
......

API创建完成后就可以添加子任务,添加了子任务就可以将子任务添加到模板,最后创建任务并执行了,执行结果实时输出

至此API类型子任务介绍完成,API类型子任务快速打通了任务系统与三方的链接,为任务系统增加了无限可能,期待它在业务中的表现

标签:get,系统,headers,任务,API,type,authorization
From: https://www.cnblogs.com/37Y37/p/18039342

相关文章

  • 系统科学方法概论第一章
    恩格斯指出:“在希腊哲学的多种多样的形式中,几乎可以发现以后所有的观点的胚胎、萌芽。”现代系统观念主要是从古代人对世界整体性的认识发展而来的,古代人对世界整体性的认识表现在两方面:(1)在宏观上把自然界看作是一个无限多样化的统一整体。(2)在微观上也把具体事物看成是一个一......
  • 组织系统
    首先,常绍舜先生从自组织系统的基本概念入手,为我们厘清了自组织与他组织的区别。他指出,自组织系统是指在没有外部指令的情况下,系统内部各元素之间通过相互作用和协同,自行产生有序结构和功能的过程。这种自组织过程具有自发性、自主性和自适应性等特点,是复杂系统演化发展的重要机制......
  • 如何在SpringBoot中优雅地重试调用第三方API?
    1引言在实际的应用中,我们经常需要调用第三方API来获取数据或执行某些操作。然而,由于网络不稳定、第三方服务异常等原因,API调用可能会失败。为了提高系统的稳定性和可靠性,我们通常会考虑实现重试机制。本文将深入探讨如何在SpringBoot项目中优雅地重试调用第三方API,并结合代码......
  • 《系统科学方法概论》第五章读后感
    《系统科学方法概论》的第五章讲的主要是自组织系统方法。自组织系统理论的提出是19世纪以来热力学同生物矛盾发展的结果。热力学第一定律、热力学第二定律从19世纪热力学中得出的几点结论1.在一个孤立系统中,热运动总是从不平衡态趋向于平衡态,并且最终达到平衡。如把一杯热水倒......
  • SpringBoot 1x 系列之(十一)Spring Boot与任务
    SpringBoot与任务异步任务、定时任务、邮件任务1.异步任务1.1应用场景执行一些操作(如:邮件任务等)不想阻塞当前线程的情况下,可以通过多线程的方式进行异步处理。1.2快速使用主配置类//开启@Async异步注解功能@EnableAsync@EnableRabbit@EnableCaching@MapperScan("co......
  • 奇门排盘 api数据接口
    奇门遁甲,奇门遁甲是中国古代的一种术数,它融合了天文学、历法学、战争学、谋略学和哲学等多个领域的知识。奇门遁甲的占测主要分为天、门、地三盘,象征三才。天盘上有九星,中盘有八宫(中宫寄二宫)布八门,地盘上有八个方位,代表静止不动的元素。根据具体时日,以六仪、三奇、八门、九星排局,......
  • 《系统科学方法概论》第五章读后感
    第五章主要讲的是自组织系统方法,首先还是其,历史发展,主要讲述了自,组织系统理论的提出并不是偶然的,他是19世纪中期以来热力学同生物学矛盾发展的结果,而随着其矛盾的解决,就产生了自组织系统理论,而第二节主要讲的是耗散结构理论简介,而耗散结构就是能量耗散过程,它还具有动态性,有序性,宏......
  • Apscheduler 使用Redis集群做为任务存储
    背景由于原生的apscheduler仅支持redis单节点连接,不支持redis集群,所以本人基于原生的RedisJobStore自己修改了一个专门用于连接redis集群的类RedisClusterJobStore修改点有以下内容:修改类名RedisJobStore为RedisClusterJobStore将原始导入的redis替换为rediscluster将原始......
  • 调用百度翻译api
    importrandomimporthashlibimporturllibimportrequestsimportjson#安装相应的库deftrans(word):src='en'#翻译的源语言obj='zh'......
  • 《系统科学方法概论》第五章读后感
    第五章介绍了自组织系统方法。自组织系统理论包括四个部分:一是散耗结构理论、二是协同学、三是超循环学说、四是突变论。自组织系统的产生不是偶然的,它是19世纪中期以来热力学同生物学矛盾发展的结果由于机械化大生产的推动,19世纪中期热力学和分子物理学发展起来了,并发现了热力学......