未知
项目描述
使用Python构建和消费Web服务(即API)。
功能
与Django、Flask和Twisted一起工作的提供者
一切都是已签名的(使用itsdangerous)
同步消费者(框架无关)
异步消费者(由Twisted提供动力)
安装
Django(提供者/消费者)
pip install webservices[django]
Flask(提供者/消费者)
pip install webservices[flask]
Twisted(提供者/消费者)
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}
Flask
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())
Twisted
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_dsn 类方法从数据源名称(例如 'http://public_key:private_key@api.example.org')创建消费者。
示例
consumer = SyncConsumer.from_dsn(‘https://public_key:private_key@api.example.org’)
许可证
此代码根据3条款BSD许可证授权,请参阅LICENSE.txt。
项目详情
websiteservices-0.7.tar.gz 的散列
算法 | 散列摘要 | |
---|---|---|
SHA256 | c4fc3c9f1061f13efce9771005e3d4b39d78efd316d3217e78d7521c7a5e03e8 |
|
MD5 | 7b0a4cbb8361f9b9368a0ead3104a635 |
|
BLAKE2b-256 | 88976034701ee2c62b6b8857e62a1dc3cd0329e65f3dd798c09b1ecb1ddd92a2 |