firebase的rest api的python接口。

python-firebase-gae的Python项目详细描述


与firebase的rest api的python接口

https://travis-ci.org/ozgur/python-firebase.png?branch=master

这个包是Ozgur’s python-firebase (the official python firebase module)的分叉版本,只做了一些修改,就可以让firebase在google appeningne上运行。

安装

python firebase高度利用了requests库,因此在开始之前,需要安装该包。

$ sudo pip install requests==1.1.0
$ sudo pip install python-firebase

开始

您可以通过在数据所在的url末尾附加“.json”来获取json格式的任何数据,然后通过浏览器发送https请求。与所有其他特定于rest的api一样,firebase提供了一个客户端来更新(补丁、放置)、创建(post)或删除(删除)其存储的数据,同时只获取数据。

该库以同步和异步方式为这些操作提供所有相应的方法。您可以使用回调函数启动异步get请求,然后使用方法

要获取存储中的所有用户,只需执行以下操作:

fromfirebaseimportfirebasefirebase=firebase.FirebaseApplication('https://your_storage.firebaseio.com',None)result=firebase.get('/users',None,params={'print':'pretty'},headers={'X_FANCY_HEADER':'very fancy'})printresult{'1':'John Doe','2':'Jane Doe'}

get方法的第二个参数是快照的名称。因此,如果将其保留为空,则会在url /users.json中获取数据。此外,如果将其设置为1,则可以在url /users/1.json中获取数据。换句话说,您得到的用户ID等于1

fromfirebaseimportfirebasefirebase=firebase.FirebaseApplication('https://your_storage.firebaseio.com',None)result=firebase.get('/users','1',params={'print':'pretty'},headers={'X_FANCY_HEADER':'very fancy'})printresult{'1':'John Doe'}

您还可以提供额外的查询参数,这些参数将附加到URL或在HTTP头中发送的额外键值对。

fromfirebaseimportfirebasefirebase=firebase.FirebaseApplication('https://your_storage.firebaseio.com',None)result=firebase.get('/users/2',None,{'print':'pretty'},{'X_FANCY_HEADER':'VERY FANCY'})printresult{'2':'Jane Doe'}

创建新数据需要POST或PUT请求。假设不将print=silent附加到url,如果使用post,则返回值将成为快照的名称,如果使用put,则返回刚刚发送的数据。如果提供print=silent,则只会得到空值,因为后端从不发送输出。

fromfirebaseimportfirebasefirebase=firebase.FirebaseApplication('https://your_storage.firebaseio.com',None)new_user='Ozgur Vatansever'result=firebase.post('/users',new_user,{'print':'pretty'},{'X_FANCY_HEADER':'VERY FANCY'})printresult{u'name':u'-Io26123nDHkfybDIGl7'}result=firebase.post('/users',new_user,{'print':'silent'},{'X_FANCY_HEADER':'VERY FANCY'})printresult==NoneTrue

与其他操作相比,删除数据相对容易。你只要设置网址就行了。后端不会因删除操作而发送任何输出。

fromfirebaseimportfirebasefirebase=firebase.FirebaseApplication('https://your_storage.firebaseio.com',None)firebase.delete('/users','1')# John Doe goes away.

身份验证

Firebase中的身份验证只是简单地创建一个符合JWT标准的令牌,并将其放入名为auth的querystring中库会为您创建该令牌,因此您永远不会在自己构建有效令牌时陷入困境。如果使用某些安全规则保护数据不受写/读操作的影响,则后端会向客户端发送相应的错误消息,状态代码为403 forbidden

fromfirebaseimportfirebasefirebase=firebase.FirebaseApplication('https://your_storage.firebaseio.com',authentication=None)result=firebase.get('/users',None,{'print':'pretty'})printresult{'error':'Permission denied.'}authentication=firebase.FirebaseAuthentication('THIS_IS_MY_SECRET','ozgurvt@gmail.com',extra={'id':123})firebase.authentication=authenticationprintauthentication.extra{'admin':False,'debug':False,'email':'ozgurvt@gmail.com','id':123,'provider':'password'}user=authentication.get_user()printuser.firebase_auth_token"eyJhbGciOiAiSFMyNTYiLCAidHlwIjogIkpXVCJ9.eyJhZG1pbiI6IGZhbHNlLCAiZGVidWciOiBmYWxzZSwgImlhdCI6IDEzNjE5NTAxNzQsICJkIjogeyJkZWJ1ZyI6IGZhbHNlLCAiYWRtaW4iOiBmYWxzZSwgInByb3ZpZGVyIjogInBhc3N3b3JkIiwgImlkIjogNSwgImVtYWlsIjogIm96Z3VydnRAZ21haWwuY29tIn0sICJ2IjogMH0.lq4IRVfvEGQklslOlS4uIBLSSJj88YNrloWXvisRgfQ"result=firebase.get('/users',None,{'print':'pretty'})printresult{'1':'John Doe','2':'Jane Doe'}

并发性

当并发进入时,接口在很大程度上依赖于standart多处理库创建异步调用时,将创建按需进程池,异步方法由池中的某个空闲进程执行。在主进程结束之前,池保持活动状态所以每次触发异步调用时,总是使用同一个池。当该方法返回时,池进程将返回值发送回所提供回调函数中的主进程。

importjsonfromfirebaseimportfirebasefromfirebaseimportjsonutilfirebase=firebase.FirebaseApplication('https://your_storage.firebaseio.com',authentication=None)deflog_user(response):withopen('/tmp/users/%s.json'%response.keys()[0],'w')asusers_file:users_file.write(json.dumps(response,cls=jsonutil.JSONEncoder))firebase.get_async('/users',None,{'print':'pretty'},callback=log_user)

待办事项

  • 异步调用必须将引发的异常传递回主进程
  • 更多关于异步调用的回归/压力测试。
  • 必须生成单据。

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

推荐PyPI第三方库


热门话题
java如何为ConcurrentHashMap使用并设置适当的并发级别?   java泛型方法,运行时错误,   java在页面上显示加载的图像   java Paypal定期直接支付问题   java如何延迟重新绘制组件   JavaSpringBoot+Hibernate如何维护@Transient字段   java在其方法中获取关于类的信息   在java中将别名添加到枚举   java如何解决向google报告成绩时“需要重新连接客户端”的问题   清晰的java图像背景   java未找到适合JDateChooser的构造函数(字符串、字符串、字符)   java LRU缓存实现。某些测试用例的代码失败   if语句Java嵌套的if/Else条件   java JSoup“wrap”并非每次都按预期工作   Java Spring引导循环依赖于一个环境   ssl证书无法通过Java和IntelliJ连接到SOAP服务   带整数验证的Java扫描器   java在Flex中呈现具有动态列的datagrid   java Android:通过用户选择的选项将文件上载到服务器   子类中的java抛出错误、异常和运行时异常