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

时间:2011-04-30 05:02:32

标签: python google-app-engine rest requesthandler

我想要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

但是这篇文章失败了,因为它期待第二个论点。对于每种类型的资源,为处理程序提供RESTful url模式的最佳设计模式是什么?

更新

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

1 个答案:

答案 0 :(得分:2)

通常你只是让它们成为单独的处理程序:正如塞巴斯蒂安指出的那样,它们是不同的资源 - 集合本身,与集合中的一个元素。

但是,如果必须使用相同的处理程序,则可以提供默认参数:

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的情况下进行调用,但是 - 很可能,你真的应该使用单独的处理程序。