firebase的rest api的python接口。
python-firebase-gae的Python项目详细描述
与firebase的rest api的python接口
这个包是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)
待办事项
- 异步调用必须将引发的异常传递回主进程
- 更多关于异步调用的回归/压力测试。
- 必须生成单据。