私の Tornado RESTful API には、 の下に配置される新しい を作成するためのCollectionHandler
at/{prefix}/items/
があります。ステータス コードを返すとき、ロジックを複製せずに、によって構築されたの本体を含めたいと考えています。これにより、多くのパラメーターを持つ静的メソッドが作成されました。post()
item
/items/{id}
201
/items/{id}
ItemHandler
get()
class CollectionHandler(tornado.web.RequestHandler):
def initialize(self):
self.service = Service()
def post(self, prefix):
do_stuff(prefix)
item, item_url = create_item()
self.set_status(201)
self.set_header('Location', item_url)
self.write(ItemHandler.do_get(self.service, item_url, item.id))
class ItemHandler(tornado.web.RequestHandler):
def initialize(self):
self.service = Service()
@staticmethod
def do_get(service, item_url, item_id):
item = service.get_item(item_id)
if not item: raise tornado.web.HTTPError(404)
response = construct_response(item_url, item)
return response
def get(self, item_id):
item_url = get_url(self.request)
self.write(ItemHandler.do_get(self.service, item_url, item_id))
どうすればこれをきれいにできますか? 新しく作成された応答を含む HTTP 要求を内部的に実行することを考えていました/items/{id}
が、もっと良い方法があるはずです-ブロックのために機能しない可能性さえあります...