Keep Simple RPC
Project description
ksrpc
Keep Simple RPC。免注册远程过程调用
项目背景
团队里常常需要通过平台下载各数据,但只有一套账号。通常的方案如下:
- 一个账号大家共用。最简单粗暴
- 账号还能登录平台的其它功能,不便于分享
- 账号可能有在线数上限,会导致互踢
- 不同成员可能重复下载相同数据,同一成员也可能反复下载相同数据
- 由IT团队将数据提前下载过来。人力成本最高
- IT团队需要提前规划部署,并向研究团队推广
- 不同数据需要IT团队针对性的提前准备下载,时效性一般
- 有些数据只是临时少量需要,需求变化快
如果搭建一套服务,客户端不需账号,基本不用改动代码,是否解决多成员分享问题?所以这个项目就是为了API转发,只是后来发现本质上是RPC
目标及特性
- 不修改第三方API源代码,实现客户端免登录
- 新接口与原接口一致,基本不用改动代码
- 数据缓存功能,减少下载次数。针对有数据有限额、调用次数有限制等情况
- 跨语言,能将大量Python的数据API转成HTTP服务,由其它语言调用
- 既支持同步调用,又支持异步调用
应用场景
- 数据缓存转发
- 源代码保护。核心代码不提供,只向外暴露服务
- 远程控制。可调os、sys等库
与其它RPC的区别
- 免注册就可以向外自动暴露所有API
- 不得不添加函数白名单与黑名单功能
- 添加了简易版的token认证功能
- 所有API都自动暴露,但并不是所有API都能正常使用。例如:
- 输入与输出无法序列化和反序列化
- 部分API使用方法特殊,也可能无法使用
- 数据量太大,序列化、网络传输都不太现实
- 可先选择不同的通讯方式,目前提供的方式有:HTTP、WebSocket
- 出于数据版权保护,默认添加了IP地址校验开关,限制只在内网使用
服务端安装
- 安装
ksrpc
库
pip install ksrpc[server] -i https://mirrors.aliyun.com/pypi/simple --upgrade
- 编辑
config.py
文件,进行ksrpy
的功能管理。如权限配置 - 编辑
run_app.py
文件,进行FastAPI
服务器设置。如端口号等 - 运行
python run_app.py
客户端安装
- 安装
ksrpc
库
pip install ksrpc -i https://mirrors.aliyun.com/pypi/simple --upgrade
- 编辑
examples
目录下的demo_http.py
和demo_websocket.py
中对应的服务地址 - 运行
demo_http.py
和demo_websocket.py
,检查是否运行正常
示例
- 直接可替代的。如
tests
目录下的:os、numpy、pandas、akshare等- 客户端没有安装相应包的情况下,IDE无法自动补全
- 需要服务端进行登录等一类处理的。如
server
目录下的,jqdatasdk、tushare、WindPy等 - 客户端参数无法序列化,需要特殊处理的。如
hack
目录下的jqdatasdk、WindPy等- 需要客户端安装第三方库,IDE的自动补全功能正常
from ksrpc import RpcClient
from ksrpc.connections.http import HttpxConnection
conn = HttpxConnection('http://127.0.0.1:8000/api')
conn.timeout = None
math = RpcClient('math', conn, is_async=False)
math.cache_get = True
math.cache_expire = 86400
# 模块中变量获取方法。加了括号
print(math.pi())
print(math.pow(2, 3))
# 创建客户连接
from ksrpc import RpcClient
from ksrpc.connections.http import HttpxConnection
conn = HttpxConnection('http://127.0.0.1:8000/api')
conn.timeout = None
client = RpcClient('tushare', conn, is_async=False)
client.cache_get = True
client.cache_expire = 86400
# 对原版库进行定制处理,需要已经安装了原版库
from ksrpc.hack.tushare import hack
hack(client)
# 原版代码可都保持不变
import tushare as ts
ts.set_token('TUSHARE_TOKEN')
pro = ts.pro_api()
df = pro.trade_cal(exchange='', start_date='20210901', end_date='20211231')
print(df)
df = pro.daily(ts_code='000001.SZ,600000.SH', start_date='20180701', end_date='20180718')
print(df)
部分支持转发的库
声明
此库仅供学习交流,请在数据提供方的授权范围内使用。请勿向第三方转发数据
参考项目
开发到一定阶段后才发现与rpyc
这个免注册暴露函数的功能类似,大家也可以去学习一下
https://github.com/tomerfiliba-org/rpyc
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
ksrpc-0.1.3.tar.gz
(22.6 kB
view details)
Built Distribution
ksrpc-0.1.3-py3-none-any.whl
(29.9 kB
view details)
File details
Details for the file ksrpc-0.1.3.tar.gz
.
File metadata
- Download URL: ksrpc-0.1.3.tar.gz
- Upload date:
- Size: 22.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.0 CPython/3.8.3
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 10f5898e143880d5487c7317f45ba2b1f02acd492bcb117daaa983719639c2a8 |
|
MD5 | 14c888df88358d3c951849882f860997 |
|
BLAKE2b-256 | 74404e90e2dc4b4ba4574d01bfb28976897b83cc98d6f7c63d62705c9fa82e51 |
File details
Details for the file ksrpc-0.1.3-py3-none-any.whl
.
File metadata
- Download URL: ksrpc-0.1.3-py3-none-any.whl
- Upload date:
- Size: 29.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.0 CPython/3.8.3
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | bea392088e2c871f614db8501ff25f70efb39f0d5cc8c3be94172c730c25c09b |
|
MD5 | a93144893b8697c08566c6de52cd1db2 |
|
BLAKE2b-256 | b3a7b83a3814e8032640eccc610f27bcbfea3efd25a05fea9d4ab224809f254a |