基于falcon框架的rpc api

falcon-rpc的Python项目详细描述


Build Status

猎鹰rpc

背景

利用Falcon Framework创建http rpc api的包装器。

这个api的动机是Slack Web API

note:首先,我建议您自己熟悉falcon和slack的api。

我发现自己为各种项目创建了大量的api,并且意识到restfulapi对于我所处理的类型的东西并不是很有用。虽然我通常需要执行一定程度的crud操作,但我创建的许多“资源”用于启动后端处理作业、运行异步分析工作负载、执行复杂查询等。

我做的大多数事情都不适合休息。坦率地说,不是“弯曲”的休息来适应我的意志,我发现API就像松弛,看起来足够灵活,足以适应任何使用情况。然而,当我为我的出价而弯腰休息时,我变得非常喜欢猎鹰框架。我百分之百的理解猎鹰是为休息而设计的,但是你猜怎么着,我可以做任何我想做的事,所以我们在这里。

快速启动

克隆repo并安装。

cd falcon_rpc
pip install -I .
importfalcon_rpcclassTest:"""``test`` method family """defok(self,req):# /test.okreq.resp_body={'foo':'bar'}deferror(self,req):# /test.error# can raise an error at anytimeraisefalcon_rpc.RPCError('dummy_error_code')deffatal(self,req):# /test.fatalnot_a_dict=1not_a_dict['nope']=2# pylint: disable=unsupported-assignment-operation  # noqadefecho(self,req):# /test.echoreq.resp_body={'you_sent':req.params}defwarn(self,req):# /test.warnreq.resp_body={'data':'mostly good'}# setting a warning even though the request was handledreq.set_warning('some_warning')classAnother:defshow_me(self,req):# req.req is the original Falcon Request objectreq.resp_body={'hello_there':req.req.remote_addr}defstart():rpc=falcon_rpc.RPC()rpc.add_family(Test())rpc.add_family(Another())returnrpc()

它可以像猎鹰一样发射:

$ gunicorn -b :8000 "app:start()" --workers 2 --log-level DEBUG --reload

方法族和方法

您不需要向api添加路由,而是添加方法族,这里是python类。

您的api遵循像slack这样的/METHOD_FAMILY.method结构,python类的名称对应于方法系列,并且该类的方法被用作被调用的实际方法。

需要注意的是,方法系列名称不区分大小写,它们总是被转换为小写。

方法名区分大小写。

方法处理程序

方法处理程序获取一个arg,即RPCRequest的实例。

可以使用响应数据设置此对象的resp_body属性。

像slack一样,如果您的请求可以被处理,但是您需要添加一个警告,那么您可以使用set_warning方法来添加警告。

测试

$ pip install -r test-requirements.txt
$ pytest -s -vv --cov falcon_rpc --cov-report=term-missing tests/

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
junit cucumber为什么会找到“runTest.java”来运行测试?   在Eclipse中找不到java KeyPairGenerator   java NotSerializableException即使在实现Serializable之后   noclassdeffounderror(java字符串连接)为什么会出现这种异常?   java Guice:将接口绑定到由动态代理创建的实例   使用Spring数据neo4j创建空间索引时发生java错误   java对于需要在50多个excel文件上运行并且每个文件平均包含25k行的项目,最佳的方法是什么   javaNIO中的java缓冲区写入/发送消息问题   如何在Java/eclipse中添加不调用super()的警告   JavaSpring:mvcUrl映射错误的id   java应该在getInstance或构造函数中使用Init方法吗?   安卓中的java空指针异常错误   java Jsoup不能完全获取原始html代码