2012-01-19 3 views
2

Моя цель - определить RESTful api, используя CherryPy (wsgi) + uWSGI + Nginx. Мне интересно, как обращаться с методом OPTIONS, как это было предложено мне на #python. Мне сообщили, что реализация обработчика этого метода поможет вызывающим абонентам в api понять, какие методы поддерживаются, а какие - нет.Как определить метод http OPTIONS в CherryPy?

Вот что у меня до сих пор:


#!/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) 

ответ

2

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

Смежные вопросы