Как определить метод http OPTIONS в CherryPy? - PullRequest
2 голосов
/ 20 января 2012

Моя цель - определить RESTful API, используя CherryPy (wsgi) + uWSGI + Nginx.Мне интересно, как обрабатывать метод 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 голосов
/ 21 января 2012

Тело ответа OPTIONS не так важно и, конечно, не так, как указано, как заголовки.Как вы упоминаете, большинство клиентов действительно заинтересованы только в методах.Они указаны в заголовке ответа «Разрешить», который CherryPy автоматически генерирует при использовании MethodDispatcher.Все, что вы можете вернуть, действительно зависит от вас, чтобы удовлетворить потребности клиентского приложения.

...