docs: def handle(self, endpoint, *args, **kwargs):
          """
          almost identical to Resource.handle, except
          the way we handle the return value of view_method.
          """
          method = self.request_method()
  
          try:
              if not method in self.http_methods.get(endpoint, {}):
                  raise MethodNotImplemented(
                      "Unsupported method '{}' for {} endpoint.".format(
                          method,
                          endpoint
                      )
                  )
  
              if not self.is_authenticated():
                  raise Unauthorized()
  
              self.data = self.deserialize(method, endpoint, self.request_body())
              view_method = getattr(self, self.http_methods[endpoint][method])
              data = view_method(*args, **kwargs)
              if is_future(data):
                  # need to check if the view_method is a generator or not
                  data = yield data
              serialized = self.serialize(method, endpoint, data)
          except Exception as err:
              raise gen.Return(self.handle_error(err))
  
          status = self.status_map.get(self.http_methods[endpoint][method], OK)
          raise gen.Return(self.build_response(serialized, status=status))