Inherits: IConfigurable, IReferenceable, IOpenable, IUnreferenceable, IRegisterable
Description
The RestService class allows you to create REST services that receive remote calls via the HTTP/REST protocol.
Configuration parameters
- base_route: base route for remote URI
- dependencies:
- endpoint: override for HTTP Endpoint dependency
- controller: override for Controller dependency
- connection(s):
- discovery_key: (optional) key to retrieve the connection from IDiscovery
- protocol: connection protocol (http or https)
- host: host name or IP address
- port: port number
- uri: resource URI or connection string with all parameters in it
- credential: the HTTPS credentials:
- ssl_key_file: SSL private key in PEM
- ssl_crt_file: SSL certificate in PEM
- ssl_ca_file: certificate authorities (root cerfiticates) in PEM
References
- *:logger:*:*:1.0 - (optional) ILogger components to pass log messages
- *:counters:*:*:1.0 - (optional) ICounters components to pass collected measurements
- *:traces:*:*:1.0 - (optional) ITracer components to record traces
- *:discovery:*:*:1.0 - (optional) IDiscovery services to resolve connections
- *:endpoint:http:*:1.0 - (optional) HttpEndpoint reference
Fields
Instance methods
CloseAsync
Closes a component and frees used resources.
public virtualTask CloseAsync(string correlationId)
- correlationId: string - (optional) transaction id used to trace execution through the call chain.
Configure
Configures a component by passing its configuration parameters.
public virtualvoid Configure(ConfigParams config)
- config: ConfigParams - configuration parameters, containing a “connection(s)” section.
GetCorrelationId
Returns correlationId from a request
protectedstring GetCorrelationId(HttpRequest request)
- request: HttpRequest - HTTP request
- returns: string - correlation id from request.
GetFilterParams
TODO: add description
protectedFilterParams GetFilterParams(HttpRequest request)
- request: HttpRequest - TODO: add description
- returns: FilterParams - TODO: add description
GetSortParams
TODO: add description
protectedSortParams GetSortParams(HttpRequest request)
- request: HttpRequest - TODO: add description
- returns: SortParams - TODO: add description
GetParameters
TODO: add description
protectedRestOperationParameters GetParameters(HttpRequest request)
- request: HttpRequest - TODO: add description
- returns: RestOperationParameters - TODO: add description
GetContextItem
TODO: add description
public staticT GetContextItem<T>(HttpRequest request, string name)
- request: HttpRequest - TODO: add description
- name: string - TODO: add description
Instrument
Adds instrumentation to log calls and measure call time. It returns a Timing object that is used to end the time measurement.
protectedCounterTiming Instrument(string correlationId, string methodName)
- correlationId: string - (optional) transaction id used to trace execution through the call chain.
- methodName: string - method name.
- returns: CounterTiming - CounterTiming object to end the time measurement.
InstrumentError
Adds instrumentation to error handling.
protectedvoid InstrumentError(string correlationId, string methodName, Exception ex, bool rethrow = false)
- correlationId: string - (optional) transaction id used to trace execution through the call chain.
- methodName: string - method name.
- ex: Exception - Error that occured during the method call
- rethrow: bool - True to throw the exception
IsOpen
Checks if the component is open.
publicbool IsOpen()
- returns: bool - true if the component is open and false otherwise.
OpenAsync
Opens the component.
public virtualTask OpenAsync(string correlationId)
- correlationId: string - (optional) transaction id used to trace execution through the call chain.
Register
Registers all service routes in an HTTP endpoint.
This method is called by the service and must be overriden in child classes.
public virtualvoid Register()
RegisterInterceptor
Registers a middleware for a given route in an HTTP endpoint.
publicvoid RegisterInterceptor(string route, Func<HttpRequest, HttpResponse, ClaimsPrincipal, RouteData, Func<HttpRequest, HttpResponse, ClaimsPrincipal, RouteData, Task>, Task> action)
- route: string - command route. Base route will be added to this route
- action: Func<HttpRequest, HttpResponse, ClaimsPrincipal, RouteData, Func<HttpRequest, HttpResponse, ClaimsPrincipal, RouteData, Task> - action function that is called when the middleware is invoked.
RegisterOpenApiSpec
Registers the open api spec.
protected virtualvoid RegisterOpenApiSpec(string content)
- content: string - response header content
RegisterOpenApiSpecFromFile
Registers the open api spec from a file.
protected virtualvoid RegisterOpenApiSpecFromFile(string path)
- path: string - path to the file
RegisterOpenApiSpecFromResource
Registers the open api spec from a resource.
protected virtualvoid RegisterOpenApiSpecFromResource(string name)
- name: string - resource name.
RegisterOpenApiSpecFromMetadata
Registers the open api spec from metadata.
protected virtualvoid RegisterOpenApiSpecFromMetadata()
RegisterRoute
Registers a route in an HTTP endpoint.
protected virtualvoid RegisterRoute(string method, string route, Func<HttpRequest, HttpResponse, RouteData, Task> action)
- method: string - HTTP method: “get”, “head”, “post”, “put”, “delete”
- route: string - command route. base route will be added to this route
- action: Func<HttpRequest, HttpResponse, RouteData, Task> - action function that is called when an operation is invoked.
RegisterRouteWithAuth
Registers a route with authorization in an HTTP endpoint.
protected virtualvoid RegisterRouteWithAuth(string method, string route, Func<HttpRequest, HttpResponse, ClaimsPrincipal, RouteData, Func<Task>, Task> autorize, Func<HttpRequest, HttpResponse, ClaimsPrincipal, RouteData, Task> action)
- method: string - HTTP method: “get”, “head”, “post”, “put”, “delete”
- route: string - command route. base route will be added to this route
- authorize: Func<HttpRequest, HttpResponse, ClaimsPrincipal, RouteData, Func<Task>, Task> - authorization interceptor
- action: Func<HttpRequest, HttpResponse, ClaimsPrincipal, RouteData, Task> - action function that is called when an operation is invoked.
RegisterRouteWithMetadata
TODO: add description
protected virtualvoid RegisterRouteWithMetadata(string method, string route, Func<HttpRequest, HttpResponse, RouteData, Task> action, RestRouteMetadata metadata)
- method: string - TODO: add description
- action: Func<HttpRequest, HttpResponse, RouteData, Task> - TODO: add description
- metadata: RestRouteMetadata - TODO: add description
RegisterRouteWithAuthAndMetadata
TODO: add description
protected virtualvoid RegisterRouteWithAuthAndMetadata(string method, string route, Func<HttpRequest, HttpResponse, ClaimsPrincipal, RouteData, Func<Task>, Task> autorize, Func<HttpRequest, HttpResponse, ClaimsPrincipal, RouteData, Task> action, RestRouteMetadata metadata)
- method: string - TODO: add description
- route: string - TODO: add description
- autorize: Func<HttpRequest, HttpResponse, ClaimsPrincipal, RouteData, Func<Task>, Task> - TODO: add description
- action: Func<HttpRequest, HttpResponse, ClaimsPrincipal, RouteData, Task> - TODO: add description
- metadata: RestRouteMetadata - TODO: add description
SendCreatedResult
Creates a callback function that sends a newly created object as JSON. The callack function can be called directly or passed as a parameter to business logic components.
If the object is not null, it returns 200 status code. For null results it returns 204 status code. If an error occurs, it sends ErrorDescription with the approproate status code.
protectedTask SendCreatedResultAsync(HttpResponse response, object result)
- res: HttpResponse - HTTP response
- result: object - execution result
SendDeletedAsync
Creates a callback function that sends a deleted object as JSON. That callack function can be called directly or passed as a parameter to business logic components.
If object is not null, it returns 200 status code. For null results it returns 204 status code. If an error occurs, it sends ErrorDescription with approproate status code.
protectedTask SendDeletedAsync(HttpResponse response, object result)
- response: HttpResponse - HTTP response
- result: object - body object to result.
SendErrorAsync
Sends an error serialized as ErrorDescription object and the appropriate HTTP status code. If status code is not defined, it uses the 500 status code.
protectedTask SendErrorAsync(HttpResponse response, Exception ex)
- response: HttpResponse - HTTP response
- ex: Exception - error object to be sent.
SendResultAsync
Creates a callback function that sends a result as a JSON object. The callack function can be called directly or passed as a parameter to business logic components.
If the object is not null, it returns 200 status code. For null results, it returns 204 status code. If an error occurs, it sends ErrorDescription with the approproate status code.
protectedTask SendResultAsync(HttpResponse response, object result)
- response: HttpResponse - HTTP response
- result: object - body object to result.
SendEmptyResultAsync
Creates a callback function that sends an empty result with 204 status code. If error occur it sends ErrorDescription with approproate status code.
protectedTask SendEmptyResultAsync(HttpResponse response)
- response: HttpResponse - a Http response
SetReferences
Sets references to dependent components.
public virtualvoid SetReferences(IReferences references)
- references: IReferences - references to locate the component’s dependencies.
UnsetReferences
Unsets (clears) previously set references to dependent components.
public virtualvoid UnsetReferences()
Examples
class MyRestService: RestService
{
private IMyController _controller;
...
public MyRestService()
{
base();
this._dependencyResolver.put(
"controller", new Descriptor("mygroup", "controller", "*", "*", "1.0"));
}
public void SetReferences(IReferences references)
{
base.SetReferences(references);
this._controller = this._dependencyResolver.getRequired<IMyController>("controller");
}
public void register()
{
...
}
}
var service = new MyRestService();
service.Configure(ConfigParams.fromTuples(
"connection.protocol", "http",
"connection.host", "localhost",
"connection.port", 8080 ));
service.SetReferences(References.fromTuples(
new Descriptor("mygroup","controller","default","default","1.0"), controller ));
service.Open("123");
Console.Out.WriteLine("The REST service is running on port 8080");