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,如需转载请自行联系原作者

相关文章
|
12天前
|
JSON API 数据处理
【Swift开发专栏】Swift中的RESTful API集成实战
【4月更文挑战第30天】本文探讨了在Swift中集成RESTful API的方法,涉及RESTful API的基础概念,如HTTP方法和设计原则,以及Swift的网络请求技术,如`URLSession`、`Alamofire`和`SwiftyJSON`。此外,还强调了数据处理、错误管理和异步操作的重要性。通过合理利用这些工具和策略,开发者能实现高效、稳定的API集成,提升应用性能和用户体验。
|
1天前
|
JSON Go 数据格式
golang学习7,glang的web的restful接口结构体传参
golang学习7,glang的web的restful接口结构体传参
|
1天前
|
JSON Go 数据格式
golang学习6,glang的web的restful接口传参
golang学习6,glang的web的restful接口传参
|
1天前
|
JSON Go 数据格式
golang学习5,glang的web的restful接口
golang学习5,glang的web的restful接口
|
1天前
|
缓存 测试技术 API
RESTful API的最佳实践
【5月更文挑战第11天】在Python中构建RESTful API时,可以选择轻量级的Flask或全栈的Django框架。Flask适用于小型到中型API,而Django适合大型复杂项目。示例代码展示了如何在两个框架中创建任务列表API。
5 0
|
5天前
|
存储 缓存 JavaScript
深入理解RESTful API设计原则与实践
【5月更文挑战第7天】在现代Web服务开发中,表述性状态传递(REST)是一种广泛采用的架构风格,用于构建可扩展的网络应用程序接口(APIs)。本文将探讨RESTful API的核心设计原则,并通过具体实例展示如何实现一个符合REST约束的后端服务。我们将讨论资源的识别、客户端-服务器通信模式、无状态性、以及统一接口的重要性,并探索如何使用当前的流行技术栈来实现这些概念。
|
11天前
|
前端开发 API 网络架构
RESTful接口与http协议状态表述
该文介绍了RESTful风格API的好处和设计原则。RESTful API以资源为中心,通过HTTP方法(GET, POST, PUT, DELETE)表示操作,利用状态码反馈操作结果。它简化了客户端与服务端的交互,提供了一种通用规范,减少沟通成本。设计要点包括:URI描述资源,HTTP方法体现操作,使用标准HTTP状态码,GET不改变数据,使用复数名词,支持复杂资源关系,可选实现HATEOAS,以及接口版本管理。
|
11天前
|
NoSQL Java API
java一行代码实现RESTFul接口
Spring Data REST是构建在Spring Data之上的库,可自动将repository转换为REST服务,支持JPA、MongoDB、Neo4j、GemFire和Cassandra。无需手动创建Service和Controller层。要开始,需配置JPA数据源,创建实体类和Repository接口。快速实现REST接口,只需引入spring-boot-starter-data-rest Maven依赖,并在Repository接口上添加@RepositoryRestResource注解。
|
12天前
|
缓存 前端开发 搜索推荐
【Flutter前端技术开发专栏】Flutter中的自定义绘制与Canvas API
【4月更文挑战第30天】Flutter允许开发者通过`CustomPaint`和`CustomPainter`进行自定义绘制,以实现丰富视觉效果。`CustomPaint` widget将`CustomPainter`应用到画布,而`CustomPainter`需实现`paint`和`shouldRepaint`方法。`paint`用于绘制图形,如示例中创建的`MyCirclePainter`绘制蓝色圆圈。Canvas API提供绘制形状、路径、文本和图片等功能。注意性能优化,避免不必要的重绘和利用缓存提升效率。自定义绘制让Flutter UI更具灵活性和个性化,但也需要图形学知识和性能意识。
【Flutter前端技术开发专栏】Flutter中的自定义绘制与Canvas API
|
12天前
|
缓存 监控 JavaScript
Node.js中构建RESTful API的最佳实践
【4月更文挑战第30天】本文介绍了在Node.js中构建RESTful API的最佳实践:选择合适的框架(如Express、Koa)、设计清晰的API接口(遵循HTTP动词和资源路径)、实现认证授权(JWT、OAuth 2.0)、错误处理、限流缓存、编写文档和测试,以及监控性能优化。这些实践有助于创建健壮、可维护和易用的API。