influxdb/http
Lyon Hill c8de76eaf9 fix(jwt): allow jwt's to be used in query proxy calls (#16010) 2019-11-22 10:12:36 +01:00
..
influxdb fix(tasks): tasks look up system bucket id 2019-10-21 14:48:47 -07:00
metric test(http): add unit tests for /api/v2/write 2019-09-12 13:39:24 -05:00
mock updates based on review 2019-01-23 09:29:50 -08:00
Makefile Remove typescript client generation 2019-02-05 17:13:57 -08:00
README.md chore(http): update error handling example in readme (#13874) 2019-05-13 12:50:25 -07:00
api_handler.go feat: add support for setting password and org for a new user in the cli 2019-11-20 09:16:31 -08:00
api_handler_test.go feat(http): convert errorEncode to use interface 2019-06-26 21:41:01 -04:00
assets.go feat(kv): implemented key/value store with end-to-end integration tests 2019-02-19 17:47:19 -06:00
auth_service.go feat(createdAt): Added createdat and updatedAt to Authorization (#15784) 2019-11-07 06:46:30 -08:00
auth_test.go feat(createdAt): Added createdat and updatedAt to Authorization (#15784) 2019-11-07 06:46:30 -08:00
authentication_middleware.go chore: refactor password service to provide userID instead of name 2019-11-20 09:16:31 -08:00
authentication_test.go feat(auth): add jwt support in auth middleware (#15152) 2019-09-27 12:12:41 +01:00
bucket_service.go chore(http): add missing client methods for label/buckets GET reqs 2019-11-01 11:59:09 -07:00
bucket_test.go fix(influxdb): Always return user status 2019-09-24 15:19:16 -07:00
check_service.go fix(http/links): Added query links to checks and notificationRules response, updated swagger.yml (#15807) 2019-11-08 08:23:38 -08:00
check_test.go fix(http/links): Added query links to checks and notificationRules response, updated swagger.yml (#15807) 2019-11-08 08:23:38 -08:00
chronograf_handler.go feat(http): convert errorEncode to use interface 2019-06-26 21:41:01 -04:00
client.go fix client tracing propagation from doubly recording (#14204) 2019-06-26 00:48:15 -05:00
dashboard_service.go feat(pkger): add dashboard support to pkger 2019-11-01 12:20:54 -07:00
dashboard_test.go refactor: http error serialization matches the new error schema (#15196) 2019-09-19 10:06:47 -05:00
debug.go add spans to multiple services 2019-03-07 12:12:31 -07:00
delete_handler.go feat(cmd/influx): add cli delete predicate 2019-10-28 11:46:01 -04:00
delete_test.go fix(predicate): remove unsupported operator parsing 2019-10-18 15:16:21 -04:00
document_service.go chore(http): remove logging of senstive data 2019-09-25 09:49:09 -07:00
document_test.go refactor: http error serialization matches the new error schema (#15196) 2019-09-19 10:06:47 -05:00
duration.go update(http): remove kerrors, change the default to be influxdb error 2019-01-25 10:29:26 -08:00
duration_test.go feat(http) add microsecond and nanosecond durations 2018-09-25 15:15:06 -05:00
errors.go feat(influxdb): user disabling 2019-09-23 11:57:16 -07:00
errors_test.go refactor: http error serialization matches the new error schema (#15196) 2019-09-19 10:06:47 -05:00
handler.go fix(logging): add debug logging for all http requests 2019-10-07 14:19:21 -07:00
handler_test.go test(http): add test coverage for handler.go 2019-05-02 14:04:40 -07:00
health.go fix(http): health endpoint now returns pass 2018-12-20 21:53:54 -06:00
health_test.go chore(http): surface unmarshaling failures in tests (#13855) 2019-05-08 12:51:03 -07:00
label_service.go chore(http): add missing client methods for label/buckets GET reqs 2019-11-01 11:59:09 -07:00
label_test.go feat(http): convert errorEncode to use interface 2019-06-26 21:41:01 -04:00
middleware.go fix(http): /api/v2/orgs/:id/owners|members to 404 (#15504) 2019-10-21 16:37:30 -05:00
middleware_test.go fix(logging): blacklist endpoints with sensitive data from logging body 2019-10-09 13:17:24 -07: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 fix(kv): use urm filter to search endpoints 2019-10-24 13:28:34 -04:00
notification_endpoint_test.go fix(kv): use urm filter to search endpoints 2019-10-24 13:28:34 -04:00
notification_rule.go fix(http/links): Added query links to checks and notificationRules response, updated swagger.yml (#15807) 2019-11-08 08:23:38 -08:00
notification_rule_test.go fix(http/links): Added query links to checks and notificationRules response, updated swagger.yml (#15807) 2019-11-08 08:23:38 -08:00
onboarding.go fix(cmd/influx): fix list org members 2019-10-10 11:57:03 -04:00
onboarding_test.go feat(createdAt): Added createdat and updatedAt to Authorization (#15784) 2019-11-07 06:46:30 -08:00
org_service.go fix(http): /api/v2/orgs/:id/owners|members to 404 (#15504) 2019-10-21 16:37:30 -05:00
org_test.go feat(kv): random ids without comma, space, backslash for org and bucket 2019-09-08 01:50:05 -05:00
paging.go feat(http): add notification rule handler 2019-07-25 15:15:35 -04:00
paging_test.go chore: rename imports from platform to influxdb 2019-01-09 20:51:47 -08:00
pkger_http_server.go chore(pkger): fixing up the pkger parse error to respect the initial Error call 2019-11-21 17:37:14 -08:00
pkger_http_server_test.go feat(pkger): add ability to export all and defined list of resources via influx cli to a package 2019-11-21 10:55:12 -08:00
platform_handler.go feat(pkger): add pgker http server to the api handler 2019-11-07 09:44:24 -08:00
query.go fix(jwt): allow jwt's to be used in query proxy calls (#16010) 2019-11-22 10:12:36 +01:00
query_handler.go chore(ci): update go-tools 2019-08-22 10:55:05 -05:00
query_handler_test.go feat(influxdb): user disabling 2019-09-23 11:57:16 -07:00
query_test.go refactor(http): make http.Query use FluxCompiler when query is passed as text 2019-06-18 11:45:17 -07:00
ready.go chore: rename imports from platform to influxdb 2019-01-09 20:51:47 -08: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 feat(http): add predicate endpoint 2019-10-18 12:02:53 -04:00
requests_test.go feat(http): add predicate endpoint 2019-10-18 12:02:53 -04:00
router.go chore(http): provide mountable router for registering routes on APIHandler 2019-11-07 09:44:24 -08:00
router_test.go refactor: http error serialization matches the new error schema (#15196) 2019-09-19 10:06:47 -05:00
scraper_service.go chore(http): remove logging of senstive data 2019-09-25 09:49:09 -07:00
scraper_service_test.go feat(http): convert errorEncode to use interface 2019-06-26 21:41:01 -04:00
server.go chore: rename imports from platform to influxdb 2019-01-09 20:51:47 -08:00
session_handler.go chore: refactor password service to provide userID instead of name 2019-11-20 09:16:31 -08:00
session_test.go chore: refactor password service to provide userID instead of name 2019-11-20 09:16:31 -08:00
source_proxy_service.go fix client tracing propagation from doubly recording (#14204) 2019-06-26 00:48:15 -05:00
source_service.go chore(http): remove logging of senstive data 2019-09-25 09:49:09 -07:00
source_service_test.go fix(http): fix source health endpoint 2019-03-13 11:04:16 -04:00
status.go feat(influxdb): add query/write http event recorders 2019-04-17 08:33:31 -04:00
swagger.go feat(http): convert errorEncode to use interface 2019-06-26 21:41:01 -04:00
swagger.yml [chore/swagger] updated summaries and descriptions in swagger.yml (#15994) 2019-11-20 16:33:34 -07:00
swagger_assets.go chore: serve swagger.json in development builds 2019-03-09 12:42:44 -08:00
swagger_noassets.go chore: serve swagger.json in development builds 2019-03-09 12:42:44 -08:00
swagger_test.go feat(influxdb): Add labels create endpoints 2019-10-23 09:53:50 -07:00
task_service.go refactor(tasks): use go Time for Task CreatedAt, UpdatedAt, LatestCompleted, Offset (#15672) 2019-11-12 17:13:56 -08:00
task_service_test.go refactor(tasks): use Go time objects for timestamps on task Runs (#15406) 2019-10-17 17:23:45 -07:00
telegraf.go chore(http): remove logging of senstive data 2019-09-25 09:49:09 -07:00
telegraf_test.go fix(http): rename OrgID to orgID 2019-06-06 22:12:32 +08: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
transport.go refactor(http): move queryd http interface to idpe (#13862) 2019-05-09 10:41:14 -07:00
usage_service.go feat(http): convert errorEncode to use interface 2019-06-26 21:41:01 -04:00
user_resource_mapping_service.go fix(cmd/influx): fix list org members 2019-10-10 11:57:03 -04:00
user_resource_mapping_test.go fix(influxdb): Always return user status 2019-09-24 15:19:16 -07:00
user_service.go feat: add support for setting password and org for a new user in the cli 2019-11-20 09:16:31 -08:00
user_test.go feat: add support for setting password and org for a new user in the cli 2019-11-20 09:16:31 -08:00
variable_service.go chore(http): remove logging of senstive data 2019-09-25 09:49:09 -07:00
variable_test.go feat(kv): unique variable names (#15695) 2019-11-04 14:28:21 -06:00
write_handler.go feat(influxdb): Add system buckets on org creation 2019-10-21 14:48:47 -07:00
write_handler_test.go feat(influxdb): Add system buckets on org creation 2019-10-21 14:48:47 -07: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