如何在CherryPy中定义HTTP OPTIONS方法?
我的目标是使用CherryPy (wsgi) + uWSGI + Nginx来定义一个RESTful API。我想知道如何处理OPTIONS这个请求方法,这是在#python频道有人建议我的。他们告诉我,给这个方法实现一个处理器会帮助调用我这个API的人了解支持哪些方法,哪些方法不支持。
这是我目前的进展:
#!/usr/bin/env python
import cherrypy
# modules used for data access
import nosql
import dao
class Product(object):
exposed = True
def GET(self, key, *args, **kwargs):
try:
p = Product(nosql.get(key))
return p.json
except:
# return 500 error with traceback if debug
pass
def POST(self, *args, **kwargs):
try:
p = dao.Product(*args, **kwargs)
k = nosql.generate_key(Product.__name__)
nosql.set(k,str(p))
except:
# return 500 error with traceback if debug
pass
def OPTIONS(self, *args, **kwargs):
"""
The question is, what to return here? I'm looking
at the following rfc:
http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html
"""
return "GET, POST"
conf = {
'/': {
'request.dispatch':cherrypy.dispatch.MethodDispatcher(),
},
}
application = cherrypy.tree.mount(Product, config=conf)
1 个回答
2
OPTIONS响应的主体部分其实没那么重要,肯定也没有头部信息那么严格。正如你提到的,大多数客户端其实只关心支持哪些方法。这些方法会在“Allow”这个响应头里列出来,而CherryPy在你使用MethodDispatcher的时候会自动帮你加上这个头部。至于你想在主体部分返回什么,完全可以根据客户端的需求来决定。