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