未知

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。

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

推荐PyPI第三方库


热门话题
java定位/显示JLayeredPane   java如何在每个操作系统上运行JavaFX项目   java中的https请求   jtextfield maskformatter java数字和空间   java JWindow不会出现   java如何将带有状态代码的WebSocket close frame发送到浏览器?   安卓领域。io[Java]通知如何仅侦听特定表中的更改?   java如何在处理torque时正确定义项目结构   json在使用boon ObjectMapper(反)序列化JavaPOJO时是否可以确保类型安全(包括不同的POJO版本)?   java@Query在第二种情况下不起作用   java如何创建通用EJB类   已安装java Hibernate JBoss工具,但未显示Hibernate透视图   在Python中接收java类对象   java组织。冬眠MappingException:无法确定javafx的类型。场景形象图片,在桌子上:产品   编译时的java无限循环?   java根据另一个字符串的值确定一个字符串?   java在SpringMVC应用程序中查找资源   java JPA查询,ArgumentException   java Android Studio cordova推送插件   java能为某些Android设备提供性能指标吗?