func (w *WebService) Route(builder *RouteBuilder) *WebService {
	builder.copyDefaults(w.produces, w.consumes)
	w.routes = append(w.routes, builder.Build())
	return w
}
Route creates a new Route using the RouteBuilder and add to the ordered list of Routes.
package restful
import "log"
type WebService struct {
	rootPath       string
	pathExpr       *pathExpression  
	routes         []Route
	produces       []string
	consumes       []string
	pathParameters []*Parameter
	filters        []FilterFunction
	documentation  string
	apiVersion     string
}
func (w *WebService) compilePathExpression() {
	if len(w.rootPath) == 0 {
		w.Path("/")  
	}
	compiled, err := newPathExpression(w.rootPath)
	if err != nil {
		log.Fatalf("[restful] invalid path:%s because:%v", w.rootPath, err)
	}
	w.pathExpr = compiled
}
func (w *WebService) ApiVersion(apiVersion string) *WebService {
	w.apiVersion = apiVersion
	return w
}
func (w WebService) Version() string { return w.apiVersion }
func (w *WebService) Path(root string) *WebService {
	w.rootPath = root
	w.compilePathExpression()
	return w
}
func (w *WebService) Param(parameter *Parameter) *WebService {
	if w.pathParameters == nil {
		w.pathParameters = []*Parameter{}
	}
	w.pathParameters = append(w.pathParameters, parameter)
	return w
}
func (w *WebService) PathParameter(name, description string) *Parameter {
	p := &Parameter{&ParameterData{Name: name, Description: description, Required: true, DataType: "string"}}
	p.bePath()
	return p
}
func (w *WebService) QueryParameter(name, description string) *Parameter {
	p := &Parameter{&ParameterData{Name: name, Description: description, Required: false, DataType: "string"}}
	p.beQuery()
	return p
}
func (w *WebService) BodyParameter(name, description string) *Parameter {
	p := &Parameter{&ParameterData{Name: name, Description: description, Required: true}}
	p.beBody()
	return p
}
func (w *WebService) HeaderParameter(name, description string) *Parameter {
	p := &Parameter{&ParameterData{Name: name, Description: description, Required: false, DataType: "string"}}
	p.beHeader()
	return p
}
func (w *WebService) FormParameter(name, description string) *Parameter {
	p := &Parameter{&ParameterData{Name: name, Description: description, Required: false, DataType: "string"}}
	p.beForm()
	return p
}