saltstack的rest接口salt-api开发—基于flask-restful

简介:

之前官方给的salt-api在前期用着也还不错,后来发现貌似不支持timeout选项(也许我太弱,也没研究过它cherrypy的框架),搞来搞去实在没办法就拿着flask重新封装了一层webapi。


刚学的flask,写的不好勿喷(完全是为了公司需求啊!!)


代码都放在github上了,基本功能OK,只去掉了根据公司需求自定义的一些功能类。

地址:https://github.com/lustlost/saltstack-api-Flask


简单的搞了一个token验证,通过rest传过去的。这里就讲下具体的认证方式:


首先双方协商一个key,加上当先时间,到小时为止,然后hash出一个值作为最终的token,所以这个token是每小时都会变化的,双方协商好key就会自动生成。也可以精确到每十分之或者每分钟,具体看不同需求了。


1
2
3
4
5
6
7
8
9
10
11
12
class  Token():
     def  __init__( self ):
         self .now_time  =  time.strftime( '%Y-%m-%d-%H' ,time.localtime(time.time()))
     def  getToken( self ,key):
         md5  =  hashlib.md5()
         md5.update( self .now_time + key)
         return  md5.hexdigest()
     def  authToken( self ,one_token,two_token):
         if  one_token  = =  two_token:
             return  True
         else :
             return  False



这是一个请求的demo,自己修改para_dict里的value就行了,可以根据需求在para_dict中可以加上timeout的值

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import  commands,urllib
import  time,sys
import  hashlib
now_time  =  time.strftime( '%Y-%m-%d-%H' ,time.localtime(time.time()))
key  =  'haha'
md5  =  hashlib.md5()
md5.update(now_time + key)
token  =  md5.hexdigest()
"""
para_dict={
     "tgt":"200-119-0.jh.qszg.uuzu.idc",
     "server_config":"true",
     "token":token
}
"""
para_dict = {
     "tgt" : "200-119-0.jh.qszg.uuzu.idc" ,
     "fun" : "cmd.run" ,
     "args" : "uptime" ,
     "expr_form" : "list" ,
     "token" :token
}
api_url  =  "http://10.0.5.201:5000/api"
                                                                                                                                                                       
post_para  =  urllib.urlencode(para_dict)
api_info = urllib.urlopen(api_url,post_para).read()
print  "Now Token : %s"  %  token
print  api_info


最后通过uwsgi和nginx整合,提供一下uwsgi.xml

1
2
3
4
5
6
7
8
9
< uwsgi >
      < pythonpath >/root/test</ pythonpath >
      < module >api</ module >
      < callable >app</ callable >
      < socket >/tmp/uwsgi.sock</ socket >
      < master />
      < processes >4</ processes >
      < memory-report />
</ uwsgi >


看下效果:

wKiom1MUVjTwgKm-AACBybSdDKE584.jpg



本文转自lustlost 51CTO博客,原文链接:http://blog.51cto.com/lustlost/1366981,如需转载请自行联系原作者

相关文章
|
3天前
|
开发框架 监控 .NET
Visual Basic的Web服务和REST API开发指南
【4月更文挑战第27天】本文探讨了使用Visual Basic(VB.NET)构建Web服务和RESTful API的方法。首先介绍了Web服务的基础和REST API的概念,然后阐述了.NET Framework与.NET Core/.NET 5+对VB.NET的支持,以及ASP.NET Core在Web开发中的作用。接着,详细讲解了创建RESTful API的步骤,包括控制器与路由设置、模型绑定与验证,以及返回响应。此外,还讨论了安全措施、测试方法、部署选项和监控策略。最后强调,VB.NET开发者可以通过ASP.NET Core涉足现代Web服务开发,拓宽技术领域。
|
3天前
|
缓存 监控 API
构建高效可扩展的RESTful API:后端开发的实践指南
【4月更文挑战第26天】在现代Web开发中,构建一个高效、可扩展且易于维护的RESTful API是后端工程师必须面对的挑战。本文将深入探讨如何利用最佳实践和流行技术,设计出符合REST架构原则的服务端接口。我们将重点讨论API版本控制、资源路由、数据库优化、缓存策略以及安全性考虑等方面,旨在为开发者提供一套综合性解决方案,帮助其提升API的性能与可靠性。
|
11天前
|
安全 Java API
第7章 Spring Security 的 REST API 与微服务安全(2024 最新版)(上)
第7章 Spring Security 的 REST API 与微服务安全(2024 最新版)
33 0
第7章 Spring Security 的 REST API 与微服务安全(2024 最新版)(上)
|
1天前
|
XML JSON API
【PHP开发专栏】PHP RESTful API设计与开发
【4月更文挑战第29天】本文探讨了在Web开发中流行的前后端分离模式,重点介绍了RESTful API的设计与实现。REST是一种基于HTTP协议的架构风格,核心概念包括资源、表述和状态转换。RESTful API设计遵循无状态、统一接口等原则,使用GET、POST、PUT、DELETE等HTTP方法执行操作,并通过状态码和JSON/XML传输数据。在PHP中实现RESTful API,可通过定义路由、创建控制器、处理请求和响应,同时注意安全性措施,如使用HTTPS。文中还提供了一个用户管理API的实战示例,以帮助读者更好地理解和应用RESTful API。
|
1天前
|
缓存 监控 API
|
2天前
|
JSON 安全 API
【专栏】浅谈 REST API 身份验证的四种方法
【4月更文挑战第28天】本文探讨了四种REST API身份验证方法:基本认证、OAuth、JSON Web Token(JWT)和API密钥。基本认证简单但不安全;OAuth适用于授权第三方应用;JWT提供安全的身份验证信息传递;API密钥适合内部使用。选择方法时需平衡安全性、用户体验和开发复杂性。
|
5天前
|
缓存 安全 API
构建高效可扩展的RESTful API:后端架构的艺术
【4月更文挑战第25天】 在数字化时代的浪潮中,一个稳定、高效且易于扩展的后端系统是企业成功的关键。本文将探讨如何构建一个满足现代业务需求的RESTful API。我们将深入分析关键设计原则,如模块化、服务分层、缓存策略以及数据库优化,并讨论这些原则如何融入实际开发流程中。通过具体案例和最佳实践,我们的目标是为读者提供一套实用的工具和方法,以支持他们自己的后端开发工作。
|
7天前
|
人工智能 机器人 API
【Python+微信】【企业微信开发入坑指北】3. 如何利用企业微信API给微信群推送消息
【Python+微信】【企业微信开发入坑指北】3. 如何利用企业微信API给微信群推送消息
10 0
|
7天前
|
缓存 人工智能 API
【Python+微信】【企业微信开发入坑指北】2. 如何利用企业微信API主动给用户发应用消息
【Python+微信】【企业微信开发入坑指北】2. 如何利用企业微信API主动给用户发应用消息
9 0
|
7天前
|
JSON JavaScript API
访问REST API:在Vue中消费和管理远程数据
【4月更文挑战第23天】本文探讨了在Vue应用中高效访问REST API的方法,包括选择合适的API、使用Axios或Fetch发送请求、封装API服务、处理响应和数据、错误管理及性能优化。关键点在于创建服务层封装请求,使用计算属性和方法处理数据,以及实施错误处理和性能提升策略。通过这些最佳实践,开发者能更好地管理和消费远程数据,构建出动态、响应式的Vue应用。