zoukankan      html  css  js  c++  java
  • WSGI学习系列WSME

    Introduction

      Web Services Made Easy (WSME) simplifies the writing of REST web services by providing simple yet powerful typing,

      removing the need to directly manipulate the request and the response objects.

    Protocols

      WSEM support lots of protocols.

      'restjson':   Implements a REST+Json protocol.

      'restxml':   Implements a REST+Xml protocol.

      'soap':    Implements the SOAP protocol.

    Conception

    WSRoot:   Root controller for webservices

    @expose:   The return type of web service interface

    @validate:  Validate the incoming paramters type

    @signature:  Set the return type and the incoming paramters type

    Example

      WSME provide details implements for Web Service.

      WSME need a Web Framework to provide service.

      In the OpenStack, Horizon use Django web framework.

      The following example use bottle web framework.

    from wsme import WSRoot, expose, validate, signature
    from wsme.types import File
    
    import bottle
    from six import uclass Person(object):
        id = int
        firstname = unicode
        lastname = unicode
    
        hobbies = [unicode]
    
        def __repr__(self):
            return "Person(%s, %s %s, %s)" % (
                self.id,
                self.firstname, self.lastname,
                self.hobbies
            )
    
    class DemoRoot(WSRoot):
        @expose(int)
        @validate(int, int)
        def multiply(self, a, b):
            return a * b
    
        @expose(File)
        @validate(File)
        def echofile(self, afile):
            return afile
    
        @expose(unicode)
        def helloworld(self):
            return u"Здраво, свете (<- Hello World in Serbian !)"
    
        @expose(Person)
        def getperson(self):
            p = Person()
            p.id = 12
            p.firstname = u'Ross'
            p.lastname = u'Geler'
            p.hobbies = []
            print p
            return p
    
        @expose([Person])
        def listpersons(self):
            p = Person()
            p.id = 12
            p.firstname = u('Ross')
            p.lastname = u('Geler')
            r = [p]
            p = Person()
            p.id = 13
            p.firstname = u('Rachel')
            p.lastname = u('Green')
            r.append(p)
            print r
            return r
    
        @expose(Person)
        @validate(Person)
        def setperson(self, person):
            return person
    
        @expose([Person])
        @validate([Person])
        def setpersons(self, persons):
            print persons
            return persons
    
        @signature(int, int, int)
        def increment(self, value, delta=1):
            return value + delta
    
        @signature(Person, body=Person)
        def updateauthor(self, person):
            return person
    
    # Set Web Root Path root
    = DemoRoot(webpath='/ws')
    # Add Soap protocol root.addprotocol(
    'soap', tns='http://example.com/demo', typenamespace='http://example.com/demo/types', baseURL='http://127.0.0.1:8080/ws/', ) # Add Rest Json protocal root.addprotocol('restjson') # Create a wsgi Application bottle.mount('/ws/', root.wsgiapp()) # Run Applicaton in bottle bottle.run()
  • 相关阅读:
    51,智联,猎聘,boss 15
    ubuntu重命名[桌面]为[desktop]
    13周让你爱上跑步-计划表
    Typecho的安装 --【Typecho01】.md
    ubuntu跑vue报错:#Error from chokidar # Error: ENOSPC: System limit for number of file watchers reached
    Java中多线程编程--synchronized关键字
    Java中几种常见的设计模式--代理设计模式
    Metaspolit下UAC提权以及日志清除
    JVM初探(五):类的实例化
    JVM初探(四):类加载器
  • 原文地址:https://www.cnblogs.com/edisonxiang/p/4724769.html
Copyright © 2011-2022 走看看