code: func GetOperationIDAndTags(r *restful.Route) (string, []string, error) {
  	op := r.Operation
  	path := r.Path
  	var tags []string
  	prefix, exists := verbs.GetPrefix(op)
  	if !exists {
  		return op, tags, fmt.Errorf("operation names should start with a verb. Cannot determine operation verb from %v", op)
  	}
  	op = op[len(prefix):]
  	parts := strings.Split(strings.Trim(path, "/"), "/")
  	// Assume /api is /apis/core, remove this when we actually server /api/... on /apis/core/...
  	if len(parts) >= 1 && parts[0] == "api" {
  		parts = append([]string{"apis", "core"}, parts[1:]...)
  	}
  	if len(parts) >= 2 && parts[0] == "apis" {
  		trimmed := strings.TrimSuffix(parts[1], ".k8s.io")
  		prefix = prefix + ToValidOperationID(trimmed, prefix != "")
  		tag := ToValidOperationID(trimmed, false)
  		if len(parts) > 2 {
  			prefix = prefix + ToValidOperationID(parts[2], prefix != "")
  			tag = tag + "_" + ToValidOperationID(parts[2], false)
  		}
  		tags = append(tags, tag)
  	} else if len(parts) >= 1 {
  		tags = append(tags, ToValidOperationID(parts[0], false))
  	}
  	return prefix + ToValidOperationID(op, prefix != ""), tags, nil
  }
docs: // GetOperationIDAndTags returns a customize operation ID and a list of tags for kubernetes API server's OpenAPI spec to prevent duplicate IDs.