code: def __request_message_descriptor(self, request_kind, message_type, method_id,
                                     path):
      
      if isinstance(message_type, resource_container.ResourceContainer):
        base_message_type = message_type.body_message_class()
        if (request_kind == self.__NO_BODY and
            base_message_type != message_types.VoidMessage()):
          msg = ('Method %s specifies a body message in its ResourceContainer, but '
                 'is a HTTP method type that cannot accept a body.') % method_id
          raise api_exceptions.ApiConfigurationError(msg)
      else:
        base_message_type = message_type
  
      if (request_kind != self.__NO_BODY and
          base_message_type != message_types.VoidMessage()):
        self.__request_schema[method_id] = self.__parser.add_message(
            base_message_type.__class__)
  
      params = self.__params_descriptor(message_type, request_kind, path,
                                        method_id)
  
      return params
docs: 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