def call_backend(self, orig_request, start_response):
method_config, params = self.lookup_rest_method(orig_request)<EOL>if not method_config:<EOL><INDENT>cors_handler = self._create_cors_handler(orig_request)<EOL>return util.send_wsgi_not_found_response(start_response,<EOL>cors_handler=cors_handler)<EOL><DEDENT>transformed_request = self.transform_request(<EOL>orig_request, params, method_config)<EOL>discovery = discovery_service.DiscoveryService(<EOL>self.config_manager, self._backend)<EOL>discovery_response = discovery.handle_discovery_request(<EOL>transformed_request.path, transformed_request, start_response)<EOL>if discovery_response:<EOL><INDENT>return discovery_response<EOL><DEDENT>url = transformed_request.base_path + transformed_request.path<EOL>transformed_request.headers['<STR_LIT:Content-Type>'] = '<STR_LIT:application/json>'<EOL>transformed_environ = self.prepare_backend_environ(<EOL>orig_request.server, '<STR_LIT:POST>', url, transformed_request.headers.items(),<EOL>transformed_request.body, transformed_request.source_ip,<EOL>orig_request.port)<EOL>with util.StartResponseProxy() as start_response_proxy:<EOL><INDENT>body_iter = self._backend(transformed_environ, start_response_proxy.Proxy)<EOL>status = start_response_proxy.response_status<EOL>headers = start_response_proxy.response_headers<EOL>body = start_response_proxy.response_body<EOL>if not body:<EOL><INDENT>body = '<STR_LIT>'.join(body_iter)<EOL><DEDENT><DEDENT>return self.handle_backend_response(orig_request, transformed_request,<EOL>status, headers, body, method_config,<EOL>start_response)<EOL>
Generate API call (from earlier-saved request).

        This calls start_response and returns the response body.

        Args:
          orig_request: An ApiRequest, the original request from the user.
          start_response: A function with semantics defined in PEP-333.

        Returns:
          A string containing the response body.