• 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()
  • 相关阅读:
    rabbitmq报错:not_a_dets_file,"/var/lib/rabbitmq/mnesia/rabbit@Sfabrici-Demo01/recovery.dets"的解决办法
    ubuntu18上关闭默认的防火墙
    《GCD宣言》全文
    springboot日志配置
    springboot打jar包【我】
    MongoDB 4.2 用户管理
    【短道速滑四】Halcon的texture_laws算子自我研究
    Android集合之SparseArray、ArrayMap详解
    浅析微信支付:下载对账单和资金账单
    学习如修行
  • 原文地址:https://www.cnblogs.com/edisonxiang/p/4724769.html
走看看 - 开发者的网上家园