code: func joinRouteParams(action *design.ActionDefinition, att *design.AttributeDefinition) string {
  	var (
  		params = action.Routes[0].Params()
  		elems  = make([]string, len(params))
  	)
  	for i, p := range params {
  		patt, ok := att.Type.ToObject()[p]
  		if !ok {
  			continue
  		}
  		pf := "cmd.%s"
  		if patt.Type.Kind() == design.StringKind {
  			pf = "url.QueryEscape(cmd.%s)"
  		}
  		field := fmt.Sprintf(pf, codegen.Goify(p, true))
  		elems[i] = field
  	}
  	return strings.Join(elems, ", ")
  }
docs: // return a ',' joined list of Params as a reference to cmd.XFieldName
  // ordered by the required first rules.