gitee.com/liuxuezhan/go-micro-v1.18.0@v1.0.0/api/resolver/micro/micro.go (about)

     1  // Package micro provides a micro rpc resolver which prefixes a namespace
     2  package micro
     3  
     4  import (
     5  	"net/http"
     6  
     7  	"gitee.com/liuxuezhan/go-micro-v1.18.0/api/resolver"
     8  )
     9  
    10  // default resolver for legacy purposes
    11  // it uses proxy routing to resolve names
    12  // /foo becomes namespace.foo
    13  // /v1/foo becomes namespace.v1.foo
    14  type Resolver struct {
    15  	Options resolver.Options
    16  }
    17  
    18  func (r *Resolver) Resolve(req *http.Request) (*resolver.Endpoint, error) {
    19  	var name, method string
    20  
    21  	switch r.Options.Handler {
    22  	// internal handlers
    23  	case "meta", "api", "rpc", "micro":
    24  		name, method = apiRoute(req.URL.Path)
    25  	default:
    26  		method = req.Method
    27  		name = proxyRoute(req.URL.Path)
    28  	}
    29  
    30  	return &resolver.Endpoint{
    31  		Name:   name,
    32  		Method: method,
    33  	}, nil
    34  }
    35  
    36  func (r *Resolver) String() string {
    37  	return "micro"
    38  }
    39  
    40  // NewResolver creates a new micro resolver
    41  func NewResolver(opts ...resolver.Option) resolver.Resolver {
    42  	return &Resolver{
    43  		Options: resolver.NewOptions(opts...),
    44  	}
    45  }