如何创建一个同时接受POST和GET的RESTful Handler



我希望API支持:

GET /api/spam/{id}
POST /api/spam
body: {'name': 'green spam'}

我通常会路由到Handler:

webapp.WSGIApplication([r'/api/spam/(.*)', APISpam])
class APISpam(RequestHandler):
    def get(self, id):
       # do stuff
    def post(self):
       # do stuff

但是post失败了,因为它期待第二个参数。为每种类型的资源的处理程序提供RESTful url模式的最佳设计模式是什么?

更新:

上面的uri示例表示一个集合(/spam)和一个元素(/spam/{id})。那不是我的本意。两个uri示例都针对元素spam,一个是GET特定的垃圾邮件,另一个是POST新的垃圾邮件。我没有使用/spam/{id}作为POST的原因是因为我正在创建一个新的垃圾邮件,因此没有id。

通常情况下,您只需将它们设置为单独的处理程序:正如Sebastian指出的那样,它们是不同的资源—集合本身与集合中的一个元素。

如果必须使用相同的处理程序,则可以提供一个默认实参:

class APISpam(RequestHandler):
  def get(self, id=None):
    # do stuff
  def post(self, id=None):
    # do stuff
application = webapp.WSGIApplication([r'/api/spam(?:/(.*))?'])

get和post处理程序都可以在没有ID的情况下调用,但是-很可能,您确实应该使用单独的处理程序。

相关内容

  • 没有找到相关文章

最新更新