基于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第三方库


热门话题
java setcontentview在尝试创建新的EditText后使应用程序崩溃   为什么在Java中找不到输出错误?   使用JavaSpringMVC框架设置简单的HelloWorldJAXWSWebService?   java将实体类参数传递给createNativeQuery做什么?   java hibernate从子表中选择查询   java读取一个数学值。随机生成的按钮标签   在Java中,如何在不多次读取文本文件的情况下将句子数组列表拆分为单词数组列表?   java AWS CodeStar AWS Elastic Beanstalk vs Amazon EC2   java获取Android上的客户端证书信息   在Java中使用this是一种不好的做法吗?   gradle工具,用于在java中构建具有类依赖关系的图形   元音和辅音   java SAML getUnmarshaller(元素)返回null   java JDOM2、xmlns(xsd)c’ant从XML文档中更改或删除   IntelliJ Idea中的java多重嵌套Gradle项目   java将26个整数的数组转换为字符(字母表)   唯一键为每个java对象实例生成尽可能低的ID号   将JavaFX Web引擎嵌入Netbeans中的Java Swing JPanel   java Android AlertDialog如何传递参数