The titan Endpoint Provider
The endpoint provider is used by the request/response brick pair to dynamically provide REST endpoints for flow inletts to the outside world.
Building/ running
To run the service simply use go run ./cmd/endpointprovider
or to create an executable file go build ./cmd/endpointprovider
It features the following command line arguments:
Name | Options (default) | Purpose |
---|---|---|
port | (9020) | Port on which the REST Api serves |
zmq-port | (9021) | Port on which the ZeroMQ router can be reached |
zmq-bind | (*) | IP or interface to bind the ZeroMQ router to |
service-id | ("no default set") | Service ID string used for authentication |
user-manager | localhost:9000" | URL of the user service |
flow-manager | localhost:9002" | URL of the flow manager |
log-level | info/debug/warning/error | Log level |
(info) | ||
log-to-kafka | (false) | Flag: use kafka hook for logging |
kafka | (10.14.0.23:9092) | host:port of kafka broker |
service-topic | (titan.servicelogs) | kafka topic for logs |
config-file | (internal/app/endpointprovider/config.yaml) | Configuration file |
Generally, all settings listed above can be done also via environment variables, whereby the variables are composed of a prefix (TITAN_EP) and the argument using snake case:
TITAN_EP_ARGUMENT
, e.g. TITAN_EP_LOG_LEVEL
Usage
Register an endpoint
Send a registration with a zmq dealer to the zmq host:port to subscribe for an endpoint.
if the structure of the registration object is
Name | Type | Doc |
---|---|---|
Token | string | optional token string |
FlowUID | string | UUID of the flow |
FlowName | string | name of the flow |
BrickName | string | name of the brick in the flow |
The endpoint will be : host:port/UserName_of_FlowOwner/FlowName/BrickName
Alternatively, the structure of the registration object can be
Name | Type | Doc |
---|---|---|
Token | string | optional token string |
Endpoint | string | the endpoint to register |
The endpoint will be : host:port/Endpoint
All requests to the endpoint will be send to the subscriber as Response object
Name | Type | Doc |
---|---|---|
RequestID | string | UUID of the request |
Request | Request | request |
a Request object contains
Name | Type | Doc |
---|---|---|
Header | map | request header map (string-> variant) |
Method | string | UUID of the request |
Body | variant | request body |
If the endpoint is registered to include authentication with a token all requests need to include a header:
Key | Value |
---|---|
Authorization | token |
Delete an endpoint
send stop request to zmq endpoint via dealer
"stop":"endpoint"
further requests to the endpoint will not be possible.
Send a response to an endpoint
To send a response send a response message to the zmq host:port with a zmq dealer containing
Name | Type | Doc |
---|---|---|
RequestID | string | UUID of the request |
Status | int | Status code |
Body | variant | a response body |
Response | string | a response type ("TEXT" or "JSON"), default: "JSON" |