2

我希望 API 支持:

GET /api/spam/{id}

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

我通常会通过以下方式路由到处理程序:

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 示例都是针对元素 spam 的,一个是 GET 特定的垃圾邮件,另一个是 POST 新的垃圾邮件。我不使用 /spam/{id} 作为 POST 的原因是因为我正在创建一个新的垃圾邮件,因此没有 id。

4

1 回答 1

2

通常,您只需将它们设置为单独的处理程序:正如 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 的情况下调用 - 很可能,您确实应该使用单独的处理程序。

于 2011-04-30T11:05:40.717 回答