视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
使用Python的Bottle框架写一个简单的服务接口的示例
2020-11-27 14:41:53 责编:小采
文档

是不是有这么一个场景,对外提供一堆数据或者是要返回给用户一个结果。但是不想把内部的一些数据和逻辑暴露给对方。。简单点来说,就是想以服务的方式对外提供一个接口。对于这种有很多处理方式,RPC,搭建一个web服务啥的。。但是这些毕竟都太重量级了,操作起来很麻烦。我这里给出的一种非常easy的方式来处理。使用bottle解决问题。

需求: 检查一个zookeeper服务中的某些节点是否存在,如果存在返回OK,不存在则给出不存的节点信息。要求返回的信息是和pyunit的结果信息一致。

实现环境:

1. python 2.7 以及自带的pyunit
2. bottle 作为一个python的简易服务器

pip install bottle

3. kazoo 一个python的zookeeper客户端

pip install kazoo

1. 创建一个python的测试类 zk_check.py

 -*- coding: utf-8 -*- 
 
 from kazoo.client import KazooClient 
 import unittest 
 class zktest(unittest.TestCase): 
 def runTest(self): 
 zknamespace = “/app/zktest_performance_1” 
 zkhosts = “127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183” 
 ZKTEST_DRIVERS = [“ip1”, “ip2”] 
 ZKTEST_NODES = [“ip3”, “ip4”, “ip5”, “ip6”]
 
 driverChildren = [] 
 nodeChildren = [] 
 badDrivers = [] 
 badNodes = [] 
 # checking 
 zk = KazooClient(hosts=zkhosts, read_only=True) 
 zk.start() 
 driverFatherPath = zknamespace + “/status/drivers” 
 nodeFatherPath = zknamespace + “/status/nodes” 
 
 if zk.exists(driverFatherPath): 
 driverChildren = zk.get_children(driverFatherPath) 
 if len(driverChildren) > 
 
 for driver in zktest_DRIVERS: 
 if driver not in driverChildren: 
 badDrivers.append(driver) 
 
 if zk.exists(nodeFatherPath): 
 nodeChildren = zk.get_children(nodeFatherPath) 
 if len(nodeChildren) > 
 
 for node in zktest_NODES: 
 if node not in nodeChildren: 
 badNodes.append(node) 
 zk.stop()
 if (len(badNodes)==0) and (len(badDrivers)==0): 
 self.assertEquals(1,1,”pass”) 
 else: 
 if len(badDrivers) > 0: 
 self.assertEquals(1,2,'len : %d , error : %s' % (len(badDrivers),badDrivers))
 if len(badNodes) > 0: 
 self.assertEquals(1,2,'len : %d , error : %s' % (len(badNodes),badNodes)) 
 if __name__ == ‘__main__': 
 unittest.main()

2. 写一个bottle服务,将结果输出

 import commands 
 from bottle import route, run, template 
 @route(‘/alisa') 
 def index(): 
 command = “python /Users/metaboy/script/zk_check.py” 
 
 #output = os.popen(command) 
 return template(‘{{text}}', text=commands.getoutput(command)) 
 
 run(host='localhost', port=8888) 

3. 后台启动bottle服务,提供外部访问ip

现在可以直接通过 http://localhost:8888/alisa 进行访问。

下载本文
显示全文
专题