def __request_message_descriptor(self, request_kind, message_type, method_id,<EOL>path):
descriptor = {}<EOL>params, param_order = self.__params_descriptor(message_type, request_kind,<EOL>path, method_id)<EOL>if isinstance(message_type, resource_container.ResourceContainer):<EOL><INDENT>message_type = message_type.body_message_class()<EOL><DEDENT>if (request_kind == self.__NO_BODY or<EOL>message_type == message_types.VoidMessage()):<EOL><INDENT>descriptor['<STR_LIT:body>'] = '<STR_LIT>'<EOL><DEDENT>else:<EOL><INDENT>descriptor['<STR_LIT:body>'] = '<STR_LIT>'<EOL>descriptor['<STR_LIT>'] = '<STR_LIT>'<EOL>self.__request_schema[method_id] = self.__parser.add_message(<EOL>message_type.__class__)<EOL><DEDENT>if params:<EOL><INDENT>descriptor['<STR_LIT>'] = params<EOL><DEDENT>if param_order:<EOL><INDENT>descriptor['<STR_LIT>'] = param_order<EOL><DEDENT>return descriptor<EOL>
Describes the parameters and body of the request.

        Args:
          request_kind: The type of request being made.
          message_type: messages.Message or ResourceContainer class. The message to
              describe.
          method_id: string, Unique method identifier (e.g. 'myapi.items.method')
          path: string, HTTP path to method.

        Returns:
          Dictionary describing the request.

        Raises:
          ValueError: if the method path and request required fields do not match