在我的 Tornado RESTful API 中,我有一个CollectionHandler
at/{prefix}/items/
和 apost()
来创建一个新item
的,它将放在/items/{id}
. 当我返回201
状态码时,我想包含由's/items/{id}
构造的 that 的主体,而不是重复其逻辑。这导致了一个带有很多参数的静态方法: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}
并包含响应,但必须有一些更好的方法——它甚至可能因为阻塞而无法工作......