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

しかし、2番目の引数を期待しているため、投稿は失敗します。各タイプのリソースのハンドラーへのRESTfulURLパターンに対応するための最適なデザインパターンは何ですか?

アップデート:

上記のURIの例は、コレクション(/ spam)と要素(/ spam / {id})を表していることが指摘されています。それは私の意図ではありません。両方のURIの例は、要素スパム用であり、1つは特定のスパムを取得するためのものであり、もう1つは新しいスパムをPOSTするためのものです。POSTに/spam/ {id}を使用していない理由は、新しいスパムを作成しているため、IDがないためです。

4

1 に答える 1

2

通常は、それらを別々のハンドラーにするだけです。Sebastianが指摘しているように、これらは異なるリソースです。つまり、コレクション自体と、コレクションの1つの要素です。

ただし、同じハンドラーを使用する必要がある場合は、デフォルトの引数を指定できます。

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 に答える