profilesvc

package
v0.18.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 19, 2024 License: MIT, MIT Imports: 15 Imported by: 0

README

profilesvc

This example demonstrates how to use Go kit to implement a REST-y HTTP service. It leverages the excellent gorilla mux package for routing.

Run the example with the optional port address for the service:

$ go run ./cmd/profilesvc/main.go -http.addr :8080
ts=2018-05-01T16:13:12.849086255Z caller=main.go:47 transport=HTTP addr=:8080

Create a Profile:

$ curl -d '{"id":"1234","Name":"Go Kit"}' -H "Content-Type: application/json" -X POST http://localhost:8080/profiles/
{}

Get the profile you just created

$ curl localhost:8080/profiles/1234
{"profile":{"id":"1234","name":"Go Kit"}}

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	ErrInconsistentIDs = errors.New("inconsistent IDs")
	ErrAlreadyExists   = errors.New("already exists")
	ErrNotFound        = errors.New("not found")
)
View Source
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 MakeDeleteAddressEndpoint

MakeDeleteAddressEndpoint returns an endpoint via the passed service. Primarily useful in a server.

func MakeDeleteProfileEndpoint

MakeDeleteProfileEndpoint returns an endpoint via the passed service. Primarily useful in a server.

func MakeGetAddressEndpoint

func MakeGetAddressEndpoint(s Service) endpoint.Endpoint[GetAddressRequest, GetAddressResponse]

MakeGetAddressEndpoint returns an endpoint via the passed service. Primarily useful in a server.

func MakeGetAddressesEndpoint

MakeGetAddressesEndpoint returns an endpoint via the passed service. Primarily useful in a server.

func MakeGetProfileEndpoint

func MakeGetProfileEndpoint(s Service) endpoint.Endpoint[GetProfileRequest, GetProfileResponse]

MakeGetProfileEndpoint returns an endpoint via the passed service. Primarily useful in a server.

func MakeHTTPHandler

func MakeHTTPHandler(s Service, logger log.Logger) http.Handler

MakeHTTPHandler mounts all of the service endpoints into an http.Handler. Useful in a profilesvc server.

func MakePatchProfileEndpoint

MakePatchProfileEndpoint returns an endpoint via the passed service. Primarily useful in a server.

func MakePostAddressEndpoint

func MakePostAddressEndpoint(s Service) endpoint.Endpoint[PostAddressRequest, PostAddressResponse]

MakePostAddressEndpoint returns an endpoint via the passed service. Primarily useful in a server.

func MakePostProfileEndpoint

func MakePostProfileEndpoint(s Service) endpoint.Endpoint[PostProfileRequest, PostProfileResponse]

MakePostProfileEndpoint returns an endpoint via the passed service. Primarily useful in a server.

func MakePutProfileEndpoint

func MakePutProfileEndpoint(s Service) endpoint.Endpoint[PutProfileRequest, PutProfileResponse]

MakePutProfileEndpoint returns an endpoint via the passed service. Primarily useful in a server.

Types

type Address

type Address struct {
	ID       string `json:"id"`
	Location string `json:"location,omitempty"`
}

Address is a field of a user profile. ID should be unique within the profile (at a minimum).

type DeleteAddressRequest added in v0.18.0

type DeleteAddressRequest struct {
	ProfileID string
	AddressID string
}

type DeleteAddressResponse added in v0.18.0

type DeleteAddressResponse struct {
	Err error `json:"err,omitempty"`
}

type DeleteProfileRequest added in v0.18.0

type DeleteProfileRequest struct {
	ID string
}

type DeleteProfileResponse added in v0.18.0

type DeleteProfileResponse struct {
	Err error `json:"err,omitempty"`
}

type Endpoints

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

func MakeClientEndpoints(instance string) (Endpoints, error)

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

func MakeServerEndpoints(s Service) Endpoints

MakeServerEndpoints returns an Endpoints struct where each endpoint invokes the corresponding method on the provided service. Useful in a profilesvc server.

func (Endpoints) DeleteAddress

func (e Endpoints) DeleteAddress(ctx context.Context, profileID string, addressID string) error

DeleteAddress implements Service. Primarily useful in a client.

func (Endpoints) DeleteProfile

func (e Endpoints) DeleteProfile(ctx context.Context, id string) error

DeleteProfile implements Service. Primarily useful in a client.

func (Endpoints) GetAddress

func (e Endpoints) GetAddress(ctx context.Context, profileID string, addressID string) (Address, error)

GetAddress implements Service. Primarily useful in a client.

func (Endpoints) GetAddresses

func (e Endpoints) GetAddresses(ctx context.Context, profileID string) ([]Address, error)

GetAddresses implements Service. Primarily useful in a client.

func (Endpoints) GetProfile

func (e Endpoints) GetProfile(ctx context.Context, id string) (Profile, error)

GetProfile implements Service. Primarily useful in a client.

func (Endpoints) PatchProfile

func (e Endpoints) PatchProfile(ctx context.Context, id string, p Profile) error

PatchProfile implements Service. Primarily useful in a client.

func (Endpoints) PostAddress

func (e Endpoints) PostAddress(ctx context.Context, profileID string, a Address) error

PostAddress implements Service. Primarily useful in a client.

func (Endpoints) PostProfile

func (e Endpoints) PostProfile(ctx context.Context, p Profile) error

PostProfile implements Service. Primarily useful in a client.

func (Endpoints) PutProfile

func (e Endpoints) PutProfile(ctx context.Context, id string, p Profile) error

PutProfile implements Service. Primarily useful in a client.

type GetAddressRequest added in v0.18.0

type GetAddressRequest struct {
	ProfileID string
	AddressID string
}

type GetAddressResponse added in v0.18.0

type GetAddressResponse struct {
	Address Address `json:"address,omitempty"`
	Err     error   `json:"err,omitempty"`
}

type GetAddressesRequest added in v0.18.0

type GetAddressesRequest struct {
	ProfileID string
}

type GetAddressesResponse added in v0.18.0

type GetAddressesResponse struct {
	Addresses []Address `json:"addresses,omitempty"`
	Err       error     `json:"err,omitempty"`
}

type GetProfileRequest added in v0.18.0

type GetProfileRequest struct {
	ID string
}

type GetProfileResponse added in v0.18.0

type GetProfileResponse struct {
	Profile Profile `json:"profile,omitempty"`
	Err     error   `json:"err,omitempty"`
}

type Middleware

type Middleware func(Service) Service

Middleware describes a service (as opposed to endpoint) middleware.

func LoggingMiddleware

func LoggingMiddleware(logger log.Logger) Middleware

type PatchProfileRequest added in v0.18.0

type PatchProfileRequest struct {
	ID      string
	Profile Profile
}

type PatchProfileResponse added in v0.18.0

type PatchProfileResponse struct {
	Err error `json:"err,omitempty"`
}

type PostAddressRequest added in v0.18.0

type PostAddressRequest struct {
	ProfileID string
	Address   Address
}

type PostAddressResponse added in v0.18.0

type PostAddressResponse struct {
	Err error `json:"err,omitempty"`
}

type PostProfileRequest added in v0.18.0

type PostProfileRequest struct {
	Profile Profile
}

type PostProfileResponse added in v0.18.0

type PostProfileResponse struct {
	Err error `json:"err,omitempty"`
}

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 PutProfileRequest added in v0.18.0

type PutProfileRequest struct {
	ID      string
	Profile Profile
}

type PutProfileResponse added in v0.18.0

type PutProfileResponse struct {
	Err error `json:"err,omitempty"`
}

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
	PatchProfile(ctx context.Context, id string, p Profile) error
	DeleteProfile(ctx context.Context, id string) error
	GetAddresses(ctx context.Context, profileID string) ([]Address, error)
	GetAddress(ctx context.Context, profileID string, addressID string) (Address, error)
	PostAddress(ctx context.Context, profileID string, a Address) error
	DeleteAddress(ctx context.Context, profileID string, addressID string) error
}

Service is a simple CRUD interface for user profiles.

func NewInmemService

func NewInmemService() Service

Directories

Path Synopsis
Package client provides a profilesvc client based on a predefined Consul service name and relevant tags.
Package client provides a profilesvc client based on a predefined Consul service name and relevant tags.
cmd
profilesvc command

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL