未知
webservices的Python项目详细描述
在python中构建和使用web服务(akaapi)。
功能
- 与Django、Flask和Twisted合作的提供商
- 所有内容都已签名(使用其危险性)
- 同步使用者(框架独立)
- 异步用户(由twisted供电)
安装
Django(供应商/消费者)
pip install webservices[django]
烧瓶(供应商/消费者)
pip install webservices[flask]
扭曲(提供商/消费者)
pip install webservices[twisted]
仅同步用户
pip install webservices[consumer]
快速启动
我们将编写一个api,用您的名字向您致意(如果不是名字,则为“hello world 提供)。
提供商
django
我们假设您有一个设置API_KEYS,它是一个公钥字典 映射到私钥。
myapi/urls.py:
from django.conf.urls import url, patterns from webservices.sync import provider_for_django from myapi.views import HelloProvider urlpatterns = patterns('', url(r'hello/$', provider_for_django(HelloProvider())), )
您的myapi/views.py:
from django.conf import settings from webservices.models import Provider class HelloProvider(Provider): def get_private_key(self, public_key): return settings.API_KEYS.get(public_key) def provide(self, data): name = data.get('name', 'world') return {'greeting': u'hello %s' % name}
烧瓶
app.py:
from flask import Flask from webservices.sync import provider_for_flask from webservices.models import Provider app = Flask(__name__) API_KEYS = { 'publickey': 'privatekey', # your keys here } class HelloProvider(Provider): def get_private_key(self, public_key): return API_KEYS.get(public_key) def provide(self, data): name = data.get('name', 'world') return {'greeting': u'hello %s' % name} provider_for_flask(app, '/hello/', HelloProvider())
扭曲
app.py:
from twisted.internet import reactor from twisted.web.server import Site from webservices.async import provider_for_twisted from webservices.models import Provider API_KEYS = { 'publickey': 'privatekey', # your keys here } class HelloProvider(Provider): def get_private_key(self, public_key): return API_KEYS.get(public_key) def provide(self, data): name = data.get('name', 'world') return {'greeting': u'hello %s' % name} resource = provider_for_twisted(HelloProvider()) site = Site(resource) reactor.listenTCP(80, site) reactor.run()
注意到这三个提供者基本上是相同的(除了 get_private_key)?整洁,对吧?
处理错误
要记录错误(例如使用raven),可以在Provider类上实现report_exception方法。 只要provide方法抛出异常,就会调用此方法。不需要争论。
消费者
同步
使用该代码(假设它托管在https://api.example.org)的步骤:
from webservices.sync import SyncConsumer consumer = SyncConsumer('https://api.example.org', 'mypublickey', 'myprivatekey') result = consumer.consume('/hello/', {'name': 'webservices') print result # prints 'hello webservices'
异步
同上,但异步:
from webservices.async import TwistedConsumer from twisted.internet import reactor def callback(result): print result # prints 'hello webserivces' reactor.stop() consumer = TwistedConsumer('https://api.example.org', 'mypublickey', 'myprivatekey') deferred = consumer.consume('/hello/', {'name': 'webservices') deferred.addCallback(callback) reactor.run()
数据源名称
您可以使用 from_dsnclassmethod关于消费者。
示例:
consumer = SyncConsumer.from_dsn(‘https://public_key:private_key@api.example.org’)
许可证
此代码是根据3条BSD许可证授权的,请参见license.txt。