Documentation
¶
Index ¶
- Variables
- func MakeGetProfileEndpoint(s Service) endpoint.Endpoint
- func MakeHTTPHandler(s Service, logger *log.Logger) http.Handler
- func MakePostProfileEndpoint(s Service) endpoint.Endpoint
- func MakePutProfileEndpoint(s Service) endpoint.Endpoint
- type Address
- type Endpoints
- type Middleware
- type Profile
- type Service
Constants ¶
This section is empty.
Variables ¶
var ( ErrInconsistentIDs = errors.New("inconsistent IDs") ErrAlreadyExists = errors.New("already exists") ErrNotFound = errors.New("not found") )
var ( // ErrBadRouting is returned when an expected path variable is missing. // It always indicates programmer error. ErrBadRouting = errors.New("inconsistent mapping between route and handler (programmer error)") )
Functions ¶
func MakeGetProfileEndpoint ¶
MakeGetProfileEndpoint returns an endpoint via the passed service. Primarily useful in a server.
func MakeHTTPHandler ¶
MakeHTTPHandler mounts all of the service endpoints into an http.Handler. Useful in a profilesvc server.
func MakePostProfileEndpoint ¶
MakePostProfileEndpoint returns an endpoint via the passed service. Primarily useful in a server.
func MakePutProfileEndpoint ¶
MakePutProfileEndpoint returns an endpoint via the passed service. Primarily useful in a server.
Types ¶
type Address ¶
Address is a field of a user profile. ID should be unique within the profile (at a minimum).
type Endpoints ¶
type Endpoints struct {
PostProfileEndpoint endpoint.Endpoint
GetProfileEndpoint endpoint.Endpoint
PutProfileEndpoint endpoint.Endpoint
}
Endpoints collects all of the endpoints that compose a profile service. It's meant to be used as a helper struct, to collect all of the endpoints into a single parameter.
In a server, it's useful for functions that need to operate on a per-endpoint basis. For example, you might pass an Endpoints to a function that produces an http.Handler, with each method (endpoint) wired up to a specific path. (It is probably a mistake in design to invoke the Service methods on the Endpoints struct in a server.)
In a client, it's useful to collect individually constructed endpoints into a single type that implements the Service interface. For example, you might construct individual endpoints using transport/http.NewClient, combine them into an Endpoints, and return it to the caller as a Service.
func MakeClientEndpoints ¶
MakeClientEndpoints returns an Endpoints struct where each endpoint invokes the corresponding method on the remote instance, via a transport/http.Client. Useful in a profilesvc client.
func MakeServerEndpoints ¶
MakeServerEndpoints returns an Endpoints struct where each endpoint invokes the corresponding method on the provided service. Useful in a profilesvc server.
func (Endpoints) GetProfile ¶
GetProfile implements Service. Primarily useful in a client.
func (Endpoints) PostProfile ¶
PostProfile implements Service. Primarily useful in a client.
type Middleware ¶
Middleware describes a service (as opposed to endpoint) middleware.
func LoggingMiddleware ¶
func LoggingMiddleware(logger *log.Logger) Middleware
type Profile ¶
type Profile struct {
ID string `json:"id"`
Name string `json:"name,omitempty"`
Addresses []Address `json:"addresses,omitempty"`
}
Profile represents a single user profile. ID should be globally unique.
type Service ¶
type Service interface {
PostProfile(ctx context.Context, p Profile) error
GetProfile(ctx context.Context, id string) (Profile, error)
PutProfile(ctx context.Context, id string, p Profile) error
}
Service is a simple CRUD interface for user profiles.
func NewInmemService ¶
func NewInmemService() Service
Directories
¶
| Path | Synopsis |
|---|---|
|
Package client provides a profilesvc client backed by Consul service discovery, round-robin load balancing, and automatic retry.
|
Package client provides a profilesvc client backed by Consul service discovery, round-robin load balancing, and automatic retry. |
|
cmd
|
|
|
profilesvc
command
|