zoukankan      html  css  js  c++  java
  • MethodDispatcher—Cherrypy对REST的支持

    前言

    CherryPy是Python的一个Web框架,通过MethodDispatcher内建了对REST的支持,而且使用非常方便。

    示例

    首先,我们需要有一个符合REST风格的资源(Resource)。通过Python对象来定义:

    import cherrypy
    
    class ProgSnaps(object):
        exposed=True
    
        def GET(self):
            return "You access the REST api /ProgSap/GET"

    接着,将配置里默认的Dispatcher修改为支持REST的MethodDispatcher:

    conf = {'/':{'request.dispatch':cherrypy.dispatch.MethodDispatcher()}      }

     最后,为CherryPy添加到资源的映射,启动服务器就可以通过url:http://localhost:8080/api/ProgSnaps 来访问了。

    cherrypy.tree.mount(ProgSnaps(),"/api/ProgSnaps",conf)

    注意事项

    1. 作为资源的Python对象必须是整个对象都exposed,通过设置一个对象的属性来实现,比如在ProgSnaps中设定exposed=true。非REST的情况下,都是在要暴露的方法上面添加@cherrypy.expose属性。
    2. REST的方法名必须都是大写的,比如GET,PUT,POST和DELETE。其它非大写的方法也可以定义在资源对象中,但是无法通过url访问到,可以作为实现REST方法(GET等)的辅助方法存在。比如例子中的getContent方法。
    3. 不需要自己定义http的allow头信息了,CherryPy根据资源对象中暴露的REST方法自动生成。比如本例中我们在ProgSnaps中定义了GET和PUT,那么最后http的头中会有这样的信息:
      Allow:GET, HEAD, UPDATE
      注:HEAD是默认添加的。REST总是允许访问HEAD信息。

    完整代码

    import cherrypy
    
    class ProgSnaps(object):
        exposed=True
        
        def GET(self):
            #return "You access the REST api /ProgSap/GET"
            return self.getContent("GET")
    
        def UPDATE(self):
            return "You have accessed the REST api /ProgSap/UPDATE"
    
        def getContent(self,method):
            return "You access the REST api /ProgSap/"+method
    
    conf = {
            '/':{'request.dispatch':cherrypy.dispatch.MethodDispatcher()}
            }
    
    if __name__ == '__main__':
        cherrypy.tree.mount(ProgSnaps(),"/api/ProgSnaps",conf)
        cherrypy.engine.start()
        cherrypy.engine.block()
  • 相关阅读:
    Jersey 2.x 运行项目
    Jersey 2.x 探索新建的工程
    Jersey 2.x 从Maven Archetype 创建一个新项目
    Jersey 2.x 服务器端应用支持的容器
    Jersey 2.x JDK 上的客户端应用
    Jersey 2.x 基于 Servlet 的服务器端应用
    =面试题:java面试基本方向 背1 有用 项目二技术学完再看
    面试题:项目开发经验总结 框架 比较难的问题 可以找一下有用
    面试题: !=!=未看
    面试题:大公司面试题 !=!=未看
  • 原文地址:https://www.cnblogs.com/rader/p/3421054.html
Copyright © 2011-2022 走看看