diff --git a/gen/cache/client.go b/gen/cache/client.go index ec6218557a4ad5ef34f1a76161238b1105677603..d4e423c35d255e27d26fd4fa72c04f858fa50515 100644 --- a/gen/cache/client.go +++ b/gen/cache/client.go @@ -16,12 +16,14 @@ import ( // Client is the "cache" service client. type Client struct { GetEndpoint goa.Endpoint + SetEndpoint goa.Endpoint } // NewClient initializes a "cache" service client given the endpoints. -func NewClient(get goa.Endpoint) *Client { +func NewClient(get, set goa.Endpoint) *Client { return &Client{ GetEndpoint: get, + SetEndpoint: set, } } @@ -34,3 +36,9 @@ func (c *Client) Get(ctx context.Context, p *CacheGetRequest) (res []byte, err e } return ires.([]byte), nil } + +// Set calls the "Set" endpoint of the "cache" service. +func (c *Client) Set(ctx context.Context, p *CacheSetRequest) (err error) { + _, err = c.SetEndpoint(ctx, p) + return +} diff --git a/gen/cache/endpoints.go b/gen/cache/endpoints.go index 4dfb7f41650a6bc82b6317a2aea05fba34d967b2..c3d44cb790448204680ba0f060701a6bfffede4c 100644 --- a/gen/cache/endpoints.go +++ b/gen/cache/endpoints.go @@ -16,18 +16,21 @@ import ( // Endpoints wraps the "cache" service endpoints. type Endpoints struct { Get goa.Endpoint + Set goa.Endpoint } // NewEndpoints wraps the methods of the "cache" service with endpoints. func NewEndpoints(s Service) *Endpoints { return &Endpoints{ Get: NewGetEndpoint(s), + Set: NewSetEndpoint(s), } } // Use applies the given middleware to all the "cache" service endpoints. func (e *Endpoints) Use(m func(goa.Endpoint) goa.Endpoint) { e.Get = m(e.Get) + e.Set = m(e.Set) } // NewGetEndpoint returns an endpoint function that calls the method "Get" of @@ -38,3 +41,12 @@ func NewGetEndpoint(s Service) goa.Endpoint { return s.Get(ctx, p) } } + +// NewSetEndpoint returns an endpoint function that calls the method "Set" of +// service "cache". +func NewSetEndpoint(s Service) goa.Endpoint { + return func(ctx context.Context, req interface{}) (interface{}, error) { + p := req.(*CacheSetRequest) + return nil, s.Set(ctx, p) + } +} diff --git a/gen/cache/service.go b/gen/cache/service.go index 089bd94d2623488893a2a0a9a7c2763957b84a0b..e672fc7bc4db00887c9adb5e586ef105348ac07c 100644 --- a/gen/cache/service.go +++ b/gen/cache/service.go @@ -16,6 +16,9 @@ type Service interface { // Get value from the cache. The result is a sequence of bytes which the client // must decode. Get(context.Context, *CacheGetRequest) (res []byte, err error) + // Set value in the cache. The HTTP request body is stored as value and the key + // is assembled from HTTP request headers. + Set(context.Context, *CacheSetRequest) (err error) } // ServiceName is the name of the service as defined in the design. This is the @@ -26,7 +29,7 @@ const ServiceName = "cache" // MethodNames lists the service method names as defined in the design. These // are the same values that are set in the endpoint request contexts under the // MethodKey key. -var MethodNames = [1]string{"Get"} +var MethodNames = [2]string{"Get", "Set"} // CacheGetRequest is the payload type of the cache service Get method. type CacheGetRequest struct { @@ -34,3 +37,11 @@ type CacheGetRequest struct { Namespace string Scope string } + +// CacheSetRequest is the payload type of the cache service Set method. +type CacheSetRequest struct { + Data []byte + Key string + Namespace string + Scope string +} diff --git a/gen/http/cache/client/cli.go b/gen/http/cache/client/cli.go index 102424b710f74365e6125b64830218de30980a04..831930f08a936972035d19196555ce387b10215d 100644 --- a/gen/http/cache/client/cli.go +++ b/gen/http/cache/client/cli.go @@ -32,3 +32,32 @@ func BuildGetPayload(cacheGetKey string, cacheGetNamespace string, cacheGetScope return v, nil } + +// BuildSetPayload builds the payload for the cache Set endpoint from CLI flags. +func BuildSetPayload(cacheSetBody string, cacheSetKey string, cacheSetNamespace string, cacheSetScope string) (*cache.CacheSetRequest, error) { + var body []byte + { + body = []byte(cacheSetBody) + } + var key string + { + key = cacheSetKey + } + var namespace string + { + namespace = cacheSetNamespace + } + var scope string + { + scope = cacheSetScope + } + v := body + res := &cache.CacheSetRequest{ + Data: v, + } + res.Key = key + res.Namespace = namespace + res.Scope = scope + + return res, nil +} diff --git a/gen/http/cache/client/client.go b/gen/http/cache/client/client.go index a909cf4774e21ad7b49f24881b0b1e2d4321f37b..f813e4412a506fd9efed09bd9b534d490a5b8576 100644 --- a/gen/http/cache/client/client.go +++ b/gen/http/cache/client/client.go @@ -20,6 +20,9 @@ type Client struct { // Get Doer is the HTTP client used to make requests to the Get endpoint. GetDoer goahttp.Doer + // Set Doer is the HTTP client used to make requests to the Set endpoint. + SetDoer goahttp.Doer + // RestoreResponseBody controls whether the response bodies are reset after // decoding so they can be read again. RestoreResponseBody bool @@ -41,6 +44,7 @@ func NewClient( ) *Client { return &Client{ GetDoer: doer, + SetDoer: doer, RestoreResponseBody: restoreBody, scheme: scheme, host: host, @@ -72,3 +76,27 @@ func (c *Client) Get() goa.Endpoint { return decodeResponse(resp) } } + +// Set returns an endpoint that makes HTTP requests to the cache service Set +// server. +func (c *Client) Set() goa.Endpoint { + var ( + encodeRequest = EncodeSetRequest(c.encoder) + decodeResponse = DecodeSetResponse(c.decoder, c.RestoreResponseBody) + ) + return func(ctx context.Context, v interface{}) (interface{}, error) { + req, err := c.BuildSetRequest(ctx, v) + if err != nil { + return nil, err + } + err = encodeRequest(req, v) + if err != nil { + return nil, err + } + resp, err := c.SetDoer.Do(req) + if err != nil { + return nil, goahttp.ErrRequestError("cache", "Set", err) + } + return decodeResponse(resp) + } +} diff --git a/gen/http/cache/client/encode_decode.go b/gen/http/cache/client/encode_decode.go index dd4550d9b4b97277842a3b9a182c872796d6ed01..248a4a06bd22d3ee6ae4e4201621f2c30febcfca 100644 --- a/gen/http/cache/client/encode_decode.go +++ b/gen/http/cache/client/encode_decode.go @@ -91,3 +91,73 @@ func DecodeGetResponse(decoder func(*http.Response) goahttp.Decoder, restoreBody } } } + +// BuildSetRequest instantiates a HTTP request object with method and path set +// to call the "cache" service "Set" endpoint +func (c *Client) BuildSetRequest(ctx context.Context, v interface{}) (*http.Request, error) { + u := &url.URL{Scheme: c.scheme, Host: c.host, Path: SetCachePath()} + req, err := http.NewRequest("POST", u.String(), nil) + if err != nil { + return nil, goahttp.ErrInvalidURL("cache", "Set", u.String(), err) + } + if ctx != nil { + req = req.WithContext(ctx) + } + + return req, nil +} + +// EncodeSetRequest returns an encoder for requests sent to the cache Set +// server. +func EncodeSetRequest(encoder func(*http.Request) goahttp.Encoder) func(*http.Request, interface{}) error { + return func(req *http.Request, v interface{}) error { + p, ok := v.(*cache.CacheSetRequest) + if !ok { + return goahttp.ErrInvalidType("cache", "Set", "*cache.CacheSetRequest", v) + } + { + head := p.Key + req.Header.Set("x-cache-key", head) + } + { + head := p.Namespace + req.Header.Set("x-cache-namespace", head) + } + { + head := p.Scope + req.Header.Set("x-cache-scope", head) + } + body := p.Data + if err := encoder(req).Encode(&body); err != nil { + return goahttp.ErrEncodingError("cache", "Set", err) + } + return nil + } +} + +// DecodeSetResponse returns a decoder for responses returned by the cache Set +// endpoint. restoreBody controls whether the response body should be restored +// after having been read. +func DecodeSetResponse(decoder func(*http.Response) goahttp.Decoder, restoreBody bool) func(*http.Response) (interface{}, error) { + return func(resp *http.Response) (interface{}, error) { + if restoreBody { + b, err := ioutil.ReadAll(resp.Body) + if err != nil { + return nil, err + } + resp.Body = ioutil.NopCloser(bytes.NewBuffer(b)) + defer func() { + resp.Body = ioutil.NopCloser(bytes.NewBuffer(b)) + }() + } else { + defer resp.Body.Close() + } + switch resp.StatusCode { + case http.StatusCreated: + return nil, nil + default: + body, _ := ioutil.ReadAll(resp.Body) + return nil, goahttp.ErrInvalidResponse("cache", "Set", resp.StatusCode, string(body)) + } + } +} diff --git a/gen/http/cache/client/paths.go b/gen/http/cache/client/paths.go index d4e85ee6fa5552f06361e65105ef5bea446e5753..90588e4bae0c42a9b125238089f4519ae1b13a5f 100644 --- a/gen/http/cache/client/paths.go +++ b/gen/http/cache/client/paths.go @@ -11,3 +11,8 @@ package client func GetCachePath() string { return "/v1/cache" } + +// SetCachePath returns the URL path to the cache service Set HTTP endpoint. +func SetCachePath() string { + return "/v1/cache" +} diff --git a/gen/http/cache/server/encode_decode.go b/gen/http/cache/server/encode_decode.go index 6e8629d2e7494d5e077d13533ad55a83d966660f..1e2d096e4798d5c66e211c11778fcac21f8bb6ab 100644 --- a/gen/http/cache/server/encode_decode.go +++ b/gen/http/cache/server/encode_decode.go @@ -9,6 +9,7 @@ package server import ( "context" + "io" "net/http" goahttp "goa.design/goa/v3/http" @@ -57,3 +58,54 @@ func DecodeGetRequest(mux goahttp.Muxer, decoder func(*http.Request) goahttp.Dec return payload, nil } } + +// EncodeSetResponse returns an encoder for responses returned by the cache Set +// endpoint. +func EncodeSetResponse(encoder func(context.Context, http.ResponseWriter) goahttp.Encoder) func(context.Context, http.ResponseWriter, interface{}) error { + return func(ctx context.Context, w http.ResponseWriter, v interface{}) error { + w.WriteHeader(http.StatusCreated) + return nil + } +} + +// DecodeSetRequest returns a decoder for requests sent to the cache Set +// endpoint. +func DecodeSetRequest(mux goahttp.Muxer, decoder func(*http.Request) goahttp.Decoder) func(*http.Request) (interface{}, error) { + return func(r *http.Request) (interface{}, error) { + var ( + body []byte + err error + ) + err = decoder(r).Decode(&body) + if err != nil { + if err == io.EOF { + return nil, goa.MissingPayloadError() + } + return nil, goa.DecodePayloadError(err.Error()) + } + + var ( + key string + namespace string + scope string + ) + key = r.Header.Get("x-cache-key") + if key == "" { + err = goa.MergeErrors(err, goa.MissingFieldError("x-cache-key", "header")) + } + namespace = r.Header.Get("x-cache-namespace") + if namespace == "" { + err = goa.MergeErrors(err, goa.MissingFieldError("x-cache-namespace", "header")) + } + scope = r.Header.Get("x-cache-scope") + if scope == "" { + err = goa.MergeErrors(err, goa.MissingFieldError("x-cache-scope", "header")) + } + if err != nil { + return nil, err + } + payload := NewSetCacheSetRequest(body, key, namespace, scope) + + return payload, nil + } +} diff --git a/gen/http/cache/server/paths.go b/gen/http/cache/server/paths.go index 656155750cbb8e8932366cf94bde88f3d5e97d6f..31e15617209f7986fb54b5cf611ad1ed57c8d457 100644 --- a/gen/http/cache/server/paths.go +++ b/gen/http/cache/server/paths.go @@ -11,3 +11,8 @@ package server func GetCachePath() string { return "/v1/cache" } + +// SetCachePath returns the URL path to the cache service Set HTTP endpoint. +func SetCachePath() string { + return "/v1/cache" +} diff --git a/gen/http/cache/server/server.go b/gen/http/cache/server/server.go index 63e8e6f0139c65f080770c08f884366d149a90b3..dd65640c9087f7a8309277bd5933ee1e75f42f4f 100644 --- a/gen/http/cache/server/server.go +++ b/gen/http/cache/server/server.go @@ -20,6 +20,7 @@ import ( type Server struct { Mounts []*MountPoint Get http.Handler + Set http.Handler } // ErrorNamer is an interface implemented by generated error structs that @@ -56,8 +57,10 @@ func New( return &Server{ Mounts: []*MountPoint{ {"Get", "GET", "/v1/cache"}, + {"Set", "POST", "/v1/cache"}, }, Get: NewGetHandler(e.Get, mux, decoder, encoder, errhandler, formatter), + Set: NewSetHandler(e.Set, mux, decoder, encoder, errhandler, formatter), } } @@ -67,11 +70,13 @@ func (s *Server) Service() string { return "cache" } // Use wraps the server handlers with the given middleware. func (s *Server) Use(m func(http.Handler) http.Handler) { s.Get = m(s.Get) + s.Set = m(s.Set) } // Mount configures the mux to serve the cache endpoints. func Mount(mux goahttp.Muxer, h *Server) { MountGetHandler(mux, h.Get) + MountSetHandler(mux, h.Set) } // Mount configures the mux to serve the cache endpoints. @@ -129,3 +134,54 @@ func NewGetHandler( } }) } + +// MountSetHandler configures the mux to serve the "cache" service "Set" +// endpoint. +func MountSetHandler(mux goahttp.Muxer, h http.Handler) { + f, ok := h.(http.HandlerFunc) + if !ok { + f = func(w http.ResponseWriter, r *http.Request) { + h.ServeHTTP(w, r) + } + } + mux.Handle("POST", "/v1/cache", f) +} + +// NewSetHandler creates a HTTP handler which loads the HTTP request and calls +// the "cache" service "Set" endpoint. +func NewSetHandler( + endpoint goa.Endpoint, + mux goahttp.Muxer, + decoder func(*http.Request) goahttp.Decoder, + encoder func(context.Context, http.ResponseWriter) goahttp.Encoder, + errhandler func(context.Context, http.ResponseWriter, error), + formatter func(err error) goahttp.Statuser, +) http.Handler { + var ( + decodeRequest = DecodeSetRequest(mux, decoder) + encodeResponse = EncodeSetResponse(encoder) + encodeError = goahttp.ErrorEncoder(encoder, formatter) + ) + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + ctx := context.WithValue(r.Context(), goahttp.AcceptTypeKey, r.Header.Get("Accept")) + ctx = context.WithValue(ctx, goa.MethodKey, "Set") + ctx = context.WithValue(ctx, goa.ServiceKey, "cache") + payload, err := decodeRequest(r) + if err != nil { + if err := encodeError(ctx, w, err); err != nil { + errhandler(ctx, w, err) + } + return + } + res, err := endpoint(ctx, payload) + if err != nil { + if err := encodeError(ctx, w, err); err != nil { + errhandler(ctx, w, err) + } + return + } + if err := encodeResponse(ctx, w, res); err != nil { + errhandler(ctx, w, err) + } + }) +} diff --git a/gen/http/cache/server/types.go b/gen/http/cache/server/types.go index 4585d80628f45910bd241d0caacce974fb9766fd..67496e706748df08a202a8fd492e6db1e86bc912 100644 --- a/gen/http/cache/server/types.go +++ b/gen/http/cache/server/types.go @@ -20,3 +20,16 @@ func NewGetCacheGetRequest(key string, namespace string, scope string) *cache.Ca return v } + +// NewSetCacheSetRequest builds a cache service Set endpoint payload. +func NewSetCacheSetRequest(body []byte, key string, namespace string, scope string) *cache.CacheSetRequest { + v := body + res := &cache.CacheSetRequest{ + Data: v, + } + res.Key = key + res.Namespace = namespace + res.Scope = scope + + return res +} diff --git a/gen/http/cli/cache/cli.go b/gen/http/cli/cache/cli.go index 2bfecddeacdbcbb0bd07454c0527db1669dc680a..94eec334197b11d9bd39f266cf35c9493ab497d3 100644 --- a/gen/http/cli/cache/cli.go +++ b/gen/http/cli/cache/cli.go @@ -25,14 +25,14 @@ import ( // func UsageCommands() string { return `health (liveness|readiness) -cache get +cache (get|set) ` } // UsageExamples produces an example of a valid invocation of the CLI tool. func UsageExamples() string { return os.Args[0] + ` health liveness` + "\n" + - os.Args[0] + ` cache get --key "Officiis fuga architecto cum." --namespace "Sint adipisci." --scope "Debitis id reprehenderit incidunt necessitatibus assumenda."` + "\n" + + os.Args[0] + ` cache get --key "Suscipit sed consequatur rerum occaecati in veritatis." --namespace "Repudiandae eos consequatur sint dolorum occaecati." --scope "Voluptatum modi tenetur tempore quia est ratione."` + "\n" + "" } @@ -58,6 +58,12 @@ func ParseEndpoint( cacheGetKeyFlag = cacheGetFlags.String("key", "REQUIRED", "") cacheGetNamespaceFlag = cacheGetFlags.String("namespace", "REQUIRED", "") cacheGetScopeFlag = cacheGetFlags.String("scope", "REQUIRED", "") + + cacheSetFlags = flag.NewFlagSet("set", flag.ExitOnError) + cacheSetBodyFlag = cacheSetFlags.String("body", "REQUIRED", "") + cacheSetKeyFlag = cacheSetFlags.String("key", "REQUIRED", "") + cacheSetNamespaceFlag = cacheSetFlags.String("namespace", "REQUIRED", "") + cacheSetScopeFlag = cacheSetFlags.String("scope", "REQUIRED", "") ) healthFlags.Usage = healthUsage healthLivenessFlags.Usage = healthLivenessUsage @@ -65,6 +71,7 @@ func ParseEndpoint( cacheFlags.Usage = cacheUsage cacheGetFlags.Usage = cacheGetUsage + cacheSetFlags.Usage = cacheSetUsage if err := flag.CommandLine.Parse(os.Args[1:]); err != nil { return nil, nil, err @@ -115,6 +122,9 @@ func ParseEndpoint( case "get": epf = cacheGetFlags + case "set": + epf = cacheSetFlags + } } @@ -153,6 +163,9 @@ func ParseEndpoint( case "get": endpoint = c.Get() data, err = cachec.BuildGetPayload(*cacheGetKeyFlag, *cacheGetNamespaceFlag, *cacheGetScopeFlag) + case "set": + endpoint = c.Set() + data, err = cachec.BuildSetPayload(*cacheSetBodyFlag, *cacheSetKeyFlag, *cacheSetNamespaceFlag, *cacheSetScopeFlag) } } } @@ -205,6 +218,7 @@ Usage: COMMAND: get: Get value from the cache. The result is a sequence of bytes which the client must decode. + set: Set value in the cache. The HTTP request body is stored as value and the key is assembled from HTTP request headers. Additional help: %[1]s cache COMMAND --help @@ -219,6 +233,20 @@ Get value from the cache. The result is a sequence of bytes which the client mus -scope STRING: Example: - %[1]s cache get --key "Officiis fuga architecto cum." --namespace "Sint adipisci." --scope "Debitis id reprehenderit incidunt necessitatibus assumenda." + %[1]s cache get --key "Suscipit sed consequatur rerum occaecati in veritatis." --namespace "Repudiandae eos consequatur sint dolorum occaecati." --scope "Voluptatum modi tenetur tempore quia est ratione." +`, os.Args[0]) +} + +func cacheSetUsage() { + fmt.Fprintf(os.Stderr, `%[1]s [flags] cache set -body STRING -key STRING -namespace STRING -scope STRING + +Set value in the cache. The HTTP request body is stored as value and the key is assembled from HTTP request headers. + -body STRING: + -key STRING: + -namespace STRING: + -scope STRING: + +Example: + %[1]s cache set --body "UXVhc2kgdXQu" --key "Quasi perspiciatis." --namespace "Accusantium animi non alias." --scope "Esse inventore ullam placeat aut." `, os.Args[0]) } diff --git a/gen/http/openapi.json b/gen/http/openapi.json index b77a470aa4c05f88e90ef116416482555f7a5c90..fd67bfa4d24ca8297c3f597e1dcb0b116b3885a9 100644 --- a/gen/http/openapi.json +++ b/gen/http/openapi.json @@ -1 +1 @@ -{"swagger":"2.0","info":{"title":"Cache Service","description":"The cache service exposes interface for working with Redis.","version":""},"host":"localhost:8083","consumes":["application/json","application/xml","application/gob"],"produces":["application/json","application/xml","application/gob"],"paths":{"/liveness":{"get":{"tags":["health"],"summary":"Liveness health","operationId":"health#Liveness","responses":{"200":{"description":"OK response."}},"schemes":["http"]}},"/readiness":{"get":{"tags":["health"],"summary":"Readiness health","operationId":"health#Readiness","responses":{"200":{"description":"OK response."}},"schemes":["http"]}},"/v1/cache":{"get":{"tags":["cache"],"summary":"Get cache","description":"Get value from the cache. The result is a sequence of bytes which the client must decode.","operationId":"cache#Get","parameters":[{"name":"x-cache-key","in":"header","description":"Cache entry key","required":true,"type":"string"},{"name":"x-cache-namespace","in":"header","description":"Cache entry namespace","required":true,"type":"string"},{"name":"x-cache-scope","in":"header","description":"Cache entry scope","required":true,"type":"string"}],"responses":{"200":{"description":"OK response.","schema":{"type":"string","format":"byte"}}},"schemes":["http"]}}}} \ No newline at end of file +{"swagger":"2.0","info":{"title":"Cache Service","description":"The cache service exposes interface for working with Redis.","version":""},"host":"localhost:8083","consumes":["application/json","application/xml","application/gob"],"produces":["application/json","application/xml","application/gob"],"paths":{"/liveness":{"get":{"tags":["health"],"summary":"Liveness health","operationId":"health#Liveness","responses":{"200":{"description":"OK response."}},"schemes":["http"]}},"/readiness":{"get":{"tags":["health"],"summary":"Readiness health","operationId":"health#Readiness","responses":{"200":{"description":"OK response."}},"schemes":["http"]}},"/v1/cache":{"get":{"tags":["cache"],"summary":"Get cache","description":"Get value from the cache. The result is a sequence of bytes which the client must decode.","operationId":"cache#Get","parameters":[{"name":"x-cache-key","in":"header","description":"Cache entry key","required":true,"type":"string"},{"name":"x-cache-namespace","in":"header","description":"Cache entry namespace","required":true,"type":"string"},{"name":"x-cache-scope","in":"header","description":"Cache entry scope","required":true,"type":"string"}],"responses":{"200":{"description":"OK response.","schema":{"type":"string","format":"byte"}}},"schemes":["http"]},"post":{"tags":["cache"],"summary":"Set cache","description":"Set value in the cache. The HTTP request body is stored as value and the key is assembled from HTTP request headers.","operationId":"cache#Set","parameters":[{"name":"x-cache-key","in":"header","description":"Cache entry key","required":true,"type":"string"},{"name":"x-cache-namespace","in":"header","description":"Cache entry namespace","required":true,"type":"string"},{"name":"x-cache-scope","in":"header","description":"Cache entry scope","required":true,"type":"string"},{"name":"bytes","in":"body","required":true,"schema":{"type":"string","format":"byte"}}],"responses":{"201":{"description":"Created response."}},"schemes":["http"]}}}} \ No newline at end of file diff --git a/gen/http/openapi.yaml b/gen/http/openapi.yaml index 5043265f7fa571f22f8a8f96b303296e161d0cdd..690205fe03cff658813d035e2c458636847aec88 100644 --- a/gen/http/openapi.yaml +++ b/gen/http/openapi.yaml @@ -67,3 +67,37 @@ paths: format: byte schemes: - http + post: + tags: + - cache + summary: Set cache + description: Set value in the cache. The HTTP request body is stored as value + and the key is assembled from HTTP request headers. + operationId: cache#Set + parameters: + - name: x-cache-key + in: header + description: Cache entry key + required: true + type: string + - name: x-cache-namespace + in: header + description: Cache entry namespace + required: true + type: string + - name: x-cache-scope + in: header + description: Cache entry scope + required: true + type: string + - name: bytes + in: body + required: true + schema: + type: string + format: byte + responses: + "201": + description: Created response. + schemes: + - http diff --git a/gen/http/openapi3.json b/gen/http/openapi3.json index be3f9a4d1f1018196f1bb8c204da2f91a9434473..764795157afc8335019e957c26d8d35dbc4f7602 100644 --- a/gen/http/openapi3.json +++ b/gen/http/openapi3.json @@ -1 +1 @@ -{"openapi":"3.0.3","info":{"title":"Cache Service","description":"The cache service exposes interface for working with Redis.","version":"1.0"},"servers":[{"url":"http://localhost:8083","description":"Cache Server"}],"paths":{"/liveness":{"get":{"tags":["health"],"summary":"Liveness health","operationId":"health#Liveness","responses":{"200":{"description":"OK response."}}}},"/readiness":{"get":{"tags":["health"],"summary":"Readiness health","operationId":"health#Readiness","responses":{"200":{"description":"OK response."}}}},"/v1/cache":{"get":{"tags":["cache"],"summary":"Get cache","description":"Get value from the cache. The result is a sequence of bytes which the client must decode.","operationId":"cache#Get","parameters":[{"name":"x-cache-key","in":"header","description":"Cache entry key","allowEmptyValue":true,"required":true,"schema":{"type":"string","description":"Cache entry key","example":"did:web:example.com"},"example":"did:web:example.com"},{"name":"x-cache-namespace","in":"header","description":"Cache entry namespace","allowEmptyValue":true,"required":true,"schema":{"type":"string","description":"Cache entry namespace","example":"Login"},"example":"Login"},{"name":"x-cache-scope","in":"header","description":"Cache entry scope","allowEmptyValue":true,"required":true,"schema":{"type":"string","description":"Cache entry scope","example":"administration"},"example":"administration"}],"responses":{"200":{"description":"OK response.","content":{"application/json":{"schema":{"type":"string","example":"UmVwdWRpYW5kYWUgZW9zIGNvbnNlcXVhdHVyIHNpbnQgZG9sb3J1bSBvY2NhZWNhdGku","format":"binary"},"example":"Vm9sdXB0YXR1bSBtb2RpIHRlbmV0dXIgdGVtcG9yZSBxdWlhIGVzdCByYXRpb25lLg=="}}}}}}},"components":{},"tags":[{"name":"health","description":"Health service provides health check endpoints."},{"name":"cache","description":"Cache service allows storing and retrieving data from distributed cache."}]} \ No newline at end of file +{"openapi":"3.0.3","info":{"title":"Cache Service","description":"The cache service exposes interface for working with Redis.","version":"1.0"},"servers":[{"url":"http://localhost:8083","description":"Cache Server"}],"paths":{"/liveness":{"get":{"tags":["health"],"summary":"Liveness health","operationId":"health#Liveness","responses":{"200":{"description":"OK response."}}}},"/readiness":{"get":{"tags":["health"],"summary":"Readiness health","operationId":"health#Readiness","responses":{"200":{"description":"OK response."}}}},"/v1/cache":{"get":{"tags":["cache"],"summary":"Get cache","description":"Get value from the cache. The result is a sequence of bytes which the client must decode.","operationId":"cache#Get","parameters":[{"name":"x-cache-key","in":"header","description":"Cache entry key","allowEmptyValue":true,"required":true,"schema":{"type":"string","description":"Cache entry key","example":"did:web:example.com"},"example":"did:web:example.com"},{"name":"x-cache-namespace","in":"header","description":"Cache entry namespace","allowEmptyValue":true,"required":true,"schema":{"type":"string","description":"Cache entry namespace","example":"Login"},"example":"Login"},{"name":"x-cache-scope","in":"header","description":"Cache entry scope","allowEmptyValue":true,"required":true,"schema":{"type":"string","description":"Cache entry scope","example":"administration"},"example":"administration"}],"responses":{"200":{"description":"OK response.","content":{"application/json":{"schema":{"type":"string","example":"UXVpIGl1c3RvIGVuaW0gZXN0IGRvbG9yZXMgZG9sb3JlbSBldC4=","format":"binary"},"example":"UXVpc3F1YW0gYWIgZG9sb3JlcyBkaXN0aW5jdGlvIHF1aXMu"}}}}},"post":{"tags":["cache"],"summary":"Set cache","description":"Set value in the cache. The HTTP request body is stored as value and the key is assembled from HTTP request headers.","operationId":"cache#Set","parameters":[{"name":"x-cache-key","in":"header","description":"Cache entry key","allowEmptyValue":true,"required":true,"schema":{"type":"string","description":"Cache entry key","example":"did:web:example.com"},"example":"did:web:example.com"},{"name":"x-cache-namespace","in":"header","description":"Cache entry namespace","allowEmptyValue":true,"required":true,"schema":{"type":"string","description":"Cache entry namespace","example":"Login"},"example":"Login"},{"name":"x-cache-scope","in":"header","description":"Cache entry scope","allowEmptyValue":true,"required":true,"schema":{"type":"string","description":"Cache entry scope","example":"administration"},"example":"administration"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"string","example":"RXQgaWxsdW0gZnVnaWF0IHV0Lg==","format":"binary"},"example":"T3B0aW8gYWxpcXVhbSBlcnJvciBuYW0u"}}},"responses":{"201":{"description":"Created response."}}}}},"components":{},"tags":[{"name":"health","description":"Health service provides health check endpoints."},{"name":"cache","description":"Cache service allows storing and retrieving data from distributed cache."}]} \ No newline at end of file diff --git a/gen/http/openapi3.yaml b/gen/http/openapi3.yaml index 7fa181f0598cfd836cc793396662672f5d9f5776..22a3272368b850853ab7c45d52c28fd3ab8b5771 100644 --- a/gen/http/openapi3.yaml +++ b/gen/http/openapi3.yaml @@ -72,108 +72,175 @@ paths: schema: type: string example: - - 82 - - 101 - - 112 + - 81 - 117 - - 100 - 105 - - 97 - - 110 - - 100 - - 97 - - 101 - 32 - - 101 - - 111 + - 105 + - 117 - 115 - - 32 - - 99 + - 116 - 111 + - 32 + - 101 - 110 - - 115 + - 105 + - 109 + - 32 - 101 - - 113 - - 117 - - 97 + - 115 - 116 - - 117 - - 114 - 32 + - 100 + - 111 + - 108 + - 111 + - 114 + - 101 - 115 - - 105 - - 110 - - 116 - 32 - 100 - 111 - 108 - 111 - 114 - - 117 + - 101 - 109 - 32 - - 111 - - 99 - - 99 - - 97 - 101 - - 99 - - 97 - 116 - - 105 - 46 format: binary example: - - 86 - - 111 - - 108 + - 81 - 117 - - 112 - - 116 - - 97 - - 116 + - 105 + - 115 + - 113 - 117 + - 97 - 109 - 32 - - 109 + - 97 + - 98 + - 32 + - 100 - 111 + - 108 + - 111 + - 114 + - 101 + - 115 + - 32 - 100 - 105 - - 32 + - 115 - 116 - - 101 + - 105 - 110 - - 101 - - 116 - - 117 - - 114 - - 32 + - 99 - 116 - - 101 - - 109 - - 112 + - 105 - 111 - - 114 - - 101 - 32 - 113 - 117 - 105 - - 97 - - 32 - - 101 - 115 + - 46 + post: + tags: + - cache + summary: Set cache + description: Set value in the cache. The HTTP request body is stored as value + and the key is assembled from HTTP request headers. + operationId: cache#Set + parameters: + - name: x-cache-key + in: header + description: Cache entry key + allowEmptyValue: true + required: true + schema: + type: string + description: Cache entry key + example: did:web:example.com + example: did:web:example.com + - name: x-cache-namespace + in: header + description: Cache entry namespace + allowEmptyValue: true + required: true + schema: + type: string + description: Cache entry namespace + example: Login + example: Login + - name: x-cache-scope + in: header + description: Cache entry scope + allowEmptyValue: true + required: true + schema: + type: string + description: Cache entry scope + example: administration + example: administration + requestBody: + required: true + content: + application/json: + schema: + type: string + example: + - 69 - 116 - 32 - - 114 + - 105 + - 108 + - 108 + - 117 + - 109 + - 32 + - 102 + - 117 + - 103 + - 105 - 97 - 116 - - 105 - - 111 - - 110 - - 101 + - 32 + - 117 + - 116 - 46 + format: binary + example: + - 79 + - 112 + - 116 + - 105 + - 111 + - 32 + - 97 + - 108 + - 105 + - 113 + - 117 + - 97 + - 109 + - 32 + - 101 + - 114 + - 114 + - 111 + - 114 + - 32 + - 110 + - 97 + - 109 + - 46 + responses: + "201": + description: Created response. components: {} tags: - name: health