influxdb/http
docmerlin (j. Emrys Landivar) 408ab354ef test: fix TestVariableService_handleGetVariables for changes in DefaultPageSize 2020-11-17 19:29:35 -06:00
..
influxdb Merge branch 'master' into chore/merge-master 2020-04-06 12:17:47 -05:00
legacy fix(http/legacy): filter on Default=true when no RP given in V1 write (#20074) 2020-11-17 16:04:50 -05:00
metric refactor: rewrite imports to include the /v2 suffix for version 2 2020-04-03 12:39:20 -05:00
mock refactor: rewrite imports to include the /v2 suffix for version 2 2020-04-03 12:39:20 -05:00
mocks feat(http): V1 write support 2020-08-18 14:04:35 -07:00
points fix: Ensure precision is passed to points parsing 2020-08-31 17:39:52 -07:00
Makefile fix(http): silence echo command (#18277) 2020-06-11 11:04:50 -07:00
README.md chore(http): update error handling example in readme (#13874) 2019-05-13 12:50:25 -07:00
api_handler.go chore(documents): reinstate minimal read-only document store for dashboard templates 2020-11-16 12:41:26 +00:00
api_handler_test.go refactor(kv): delete deprecated kv service code 2020-11-16 12:41:26 +00:00
assets.go refactor: rewrite imports to include the /v2 suffix for version 2 2020-04-03 12:39:20 -05:00
auth_service.go refactor(telegraf): remove references to kv service telegraf service implementation 2020-11-04 15:53:02 +00:00
auth_test.go refactor(kv): delete deprecated kv service code 2020-11-16 12:41:26 +00:00
authentication_middleware.go feat(tracing): add userID to lookup traces 2020-04-08 14:19:05 +02:00
authentication_test.go chore: update staticcheck and fix newly identified lint checks (#18737) 2020-06-26 18:54:09 -05:00
backup_service.go feat: Minor updates to backup/restore 2020-11-05 10:05:01 -07:00
check_service.go Merge branch 'master' into feat/use-algo-w 2020-05-18 13:25:26 -05:00
check_test.go fix: correct various typos (#19987) 2020-11-11 13:54:21 -05:00
chronograf_handler.go refactor: rewrite imports to include the /v2 suffix for version 2 2020-04-03 12:39:20 -05:00
client.go refactor(kv): delete deprecated kv service code 2020-11-16 12:41:26 +00:00
debug.go add spans to multiple services 2019-03-07 12:12:31 -07:00
delete_handler.go fix: correct various typos (#19987) 2020-11-11 13:54:21 -05:00
delete_test.go refactor(kv): delete deprecated kv service code 2020-11-16 12:41:26 +00:00
document_service.go chore(documents): reinstate minimal read-only document store for dashboard templates 2020-11-16 12:41:26 +00:00
document_service_test.go chore(documents): reinstate minimal read-only document store for dashboard templates 2020-11-16 12:41:26 +00:00
document_test.go chore(documents): reinstate minimal read-only document store for dashboard templates 2020-11-16 12:41:26 +00:00
duration.go refactor: rewrite imports to include the /v2 suffix for version 2 2020-04-03 12:39:20 -05:00
duration_test.go feat(http) add microsecond and nanosecond durations 2018-09-25 15:15:06 -05:00
errors.go chore(errors): interpret more cases as influxdb error type in http.CheckError (#17888) 2020-04-30 17:55:17 +01:00
errors_test.go chore(errors): interpret more cases as influxdb error type in http.CheckError (#17888) 2020-04-30 17:55:17 +01:00
handler.go fix: correct various typos (#19987) 2020-11-11 13:54:21 -05:00
handler_test.go chore(http): add response_code as label to http_api_* metrics (#19389) 2020-08-19 13:19:18 -07:00
health.go feat(api/health): report commit 2020-05-26 14:03:52 +02:00
health_test.go fix: correct various typos (#19987) 2020-11-11 13:54:21 -05:00
label_service.go refactor(kv): delete deprecated kv service code 2020-11-16 12:41:26 +00:00
label_test.go refactor(kv): delete deprecated kv service code 2020-11-16 12:41:26 +00:00
legacy.go feat(http): V1 write support 2020-08-18 14:04:35 -07:00
middleware.go refactor(kv): delete deprecated kv service code 2020-11-16 12:41:26 +00:00
middleware_test.go refactor: rewrite imports to include the /v2 suffix for version 2 2020-04-03 12:39:20 -05:00
no_assets.go feat(http): host swagger docs at /docs and /api/v2/swagger.json 2019-01-22 11:16:27 -06:00
notification_endpoint.go refactor(notifications): isolate endpoint service (#19818) 2020-10-28 15:22:14 +00:00
notification_endpoint_test.go refactor(kv): delete deprecated kv service code 2020-11-16 12:41:26 +00:00
notification_rule.go refactor(kv): delete deprecated kv service code 2020-11-16 12:41:26 +00:00
notification_rule_test.go feat(query): implement window count aggregate pushdown (#18043) 2020-05-28 13:42:38 -05:00
paging_test.go chore: update staticcheck and fix newly identified lint checks (#18737) 2020-06-26 18:54:09 -05:00
platform_handler.go feat: Use AuthorizerV1 for authorizing 1.x API requests 2020-10-30 11:56:09 -07:00
proxy_handler.go chore(http): Let the callers convert these to http.Handler. 2020-05-08 09:02:06 -04:00
query.go feat: upgrade Flux to v0.83.2 (#19569) 2020-09-16 17:59:15 -07:00
query_handler.go feat: annotate context with feature flags when handling flux queries (#18506) 2020-06-17 16:55:29 +03:00
query_handler_test.go refactor(kv): delete deprecated kv service code 2020-11-16 12:41:26 +00:00
query_test.go refactor: replace builtin package with fluxinit/static (#3304) (#19909) 2020-11-05 16:54:28 -08:00
ready.go fix(http): fix /ready response content type 2020-11-05 19:20:57 +01:00
ready_test.go fix(http): fix /ready response content type 2020-11-05 19:20:57 +01:00
redoc.go feat(http): host swagger docs at /docs and /api/v2/swagger.json 2019-01-22 11:16:27 -06:00
requests.go refactor(http): Refactor write endpoint to enable 1.x write code reuse. 2020-06-17 13:13:58 -04:00
requests_test.go fix(delete): fix delete handler to add org filter for bucket lookup (#17834) 2020-04-23 08:32:50 -06:00
restore_service.go feat: Implement full restore 2020-11-05 10:05:01 -07:00
router.go chore(http): fixup the chi base router using API type 2020-06-15 17:16:05 -07:00
router_test.go chore(http): add route path to panic log message 2020-06-09 18:00:11 -07:00
scraper_service.go refactor(kv): delete deprecated kv service code 2020-11-16 12:41:26 +00:00
scraper_service_test.go refactor(kv): delete deprecated kv service code 2020-11-16 12:41:26 +00:00
server.go refactor: rewrite imports to include the /v2 suffix for version 2 2020-04-03 12:39:20 -05:00
service_test.go refactor: migrator and introduce Store.(Create|Delete)Bucket (#18570) 2020-07-01 12:08:20 +01:00
session_handler.go fix(http): Add same site strict flag to session cookie 2020-11-12 15:35:33 -08:00
session_test.go fix: switch port to 8086 2020-09-03 14:40:29 -07:00
source_proxy_service.go refactor: rewrite imports to include the /v2 suffix for version 2 2020-04-03 12:39:20 -05:00
source_service.go refactor(kv): delete deprecated kv service code 2020-11-16 12:41:26 +00:00
source_service_test.go refactor: rewrite imports to include the /v2 suffix for version 2 2020-04-03 12:39:20 -05:00
swagger.go refactor: rewrite imports to include the /v2 suffix for version 2 2020-04-03 12:39:20 -05:00
swagger.yml fix: Allow self signed certificates to ScraperTarget (#20047) 2020-11-17 13:35:41 -05:00
swaggerV1Compat.yml fix: add 1.x compatible endpoints to swagger (#19828) 2020-10-29 11:51:32 -06:00
swagger_assets.go chore: serve swagger.json in development builds 2019-03-09 12:42:44 -08:00
swagger_noassets.go chore: Remove several instances of WithLogger (#15996) 2019-12-04 15:10:23 -08:00
swagger_test.go feat(influxdb): Add labels create endpoints 2019-10-23 09:53:50 -07:00
task_service.go fix: correct various typos (#19987) 2020-11-11 13:54:21 -05:00
task_service_test.go refactor(kv): delete deprecated kv service code 2020-11-16 12:41:26 +00:00
telegraf.go fix(telegraf): support pagination parameters when listing 2020-11-04 15:53:02 +00:00
telegraf_test.go fix: correct various typos (#19987) 2020-11-11 13:54:21 -05:00
tokens.go Ensure error strings not capitalised ST1005 2018-11-30 10:54:24 +00:00
tokens_test.go chore(bolt,http,mock,query,testing): fix megacheck errors 2018-11-01 12:54:46 -07:00
ua.go refactor(http): normalize user-agent names 2019-12-04 15:02:00 -06:00
ua_test.go refactor(http): normalize user-agent names 2019-12-04 15:02:00 -06:00
user_resource_mapping_service.go fix: improve the http urm client to allow specific path options (#18715) 2020-06-25 12:13:05 -06:00
user_resource_mapping_test.go fix: correct various typos (#19987) 2020-11-11 13:54:21 -05:00
user_service.go fix: correct various typos (#19987) 2020-11-11 13:54:21 -05:00
user_test.go refactor(kv): delete deprecated kv service code 2020-11-16 12:41:26 +00:00
variable_service.go fix(variables): add id to put variable request 2020-09-08 11:26:03 -07:00
variable_test.go test: fix TestVariableService_handleGetVariables for changes in DefaultPageSize 2020-11-17 19:29:35 -06:00
write_handler.go fix: add ability to define bucket to write to with a BucketFilter (#19658) 2020-10-05 15:05:49 -06:00
write_handler_test.go fix: switch port to 8086 2020-09-03 14:40:29 -07:00
write_usage_recorder.go refactor(http): Refactor write endpoint to enable 1.x write code reuse. 2020-06-17 13:13:58 -04:00

README.md

HTTP Handler Style Guide

HTTP Handler

  • Each handler should implement http.Handler
    • This can be done by embedding a httprouter.Router (a light weight HTTP router that supports variables in the routing pattern and matches against the request method)
  • Required services should be exported on the struct
// ThingHandler represents an HTTP API handler for things.
type ThingHandler struct {
	// embedded httprouter.Router as a lazy way to implement http.Handler
	*httprouter.Router

	ThingService         platform.ThingService
	AuthorizationService platform.AuthorizationService

	Logger               *zap.Logger
}

HTTP Handler Constructor

  • Routes should be declared in the constructor
// NewThingHandler returns a new instance of ThingHandler.
func NewThingHandler() *ThingHandler {
	h := &ThingHandler{
		Router: httprouter.New(),
		Logger: zap.Nop(),
	}

	h.HandlerFunc("POST", "/api/v2/things", h.handlePostThing)
	h.HandlerFunc("GET", "/api/v2/things", h.handleGetThings)

	return h
}

Route handlers (http.HandlerFuncs)

  • Each route handler should have an associated request struct and decode function
  • The decode function should take a context.Context and an *http.Request and return the associated route request struct
type postThingRequest struct {
	Thing *platform.Thing
}

func decodePostThingRequest(ctx context.Context, r *http.Request) (*postThingRequest, error) {
	t := &platform.Thing{}
	if err := json.NewDecoder(r.Body).Decode(t); err != nil {
		return nil, err
	}

	return &postThingRequest{
		Thing: t,
	}, nil
}
  • Route http.HandlerFuncs should separate the decoding and encoding of HTTP requests/response from actual handler logic
// handlePostThing is the HTTP handler for the POST /api/v2/things route.
func (h *ThingHandler) handlePostThing(w http.ResponseWriter, r *http.Request) {
	ctx := r.Context()

	req, err := decodePostThingRequest(ctx, r)
	if err != nil {
		EncodeError(ctx, err, w)
		return
	}

	// Do stuff here
	if err := h.ThingService.CreateThing(ctx, req.Thing); err != nil {
		EncodeError(ctx, err, w)
		return
	}

	if err := encodeResponse(ctx, w, http.StatusCreated, req.Thing); err != nil {
		h.Logger.Info("encoding response failed", zap.Error(err))
		return
	}
}
  • http.HandlerFunc's that require particular encoding of http responses should implement an encode response function