Qore RestHandler Module Reference 1.6.2
|
this is the main handler class to be registered with the HttpServer More...
#include <RestHandler.qm.dox.h>
Public Member Methods | |
constructor (*HttpServer::AbstractAuthenticator auth, RestSchemaValidator::AbstractRestSchemaValidator validator=new NullRestSchemaValidator()) | |
create the object optionally with the given HttpServer::AbstractAuthenticator More... | |
constructor (Logger::LoggerInterface logger, *HttpServer::AbstractAuthenticator auth, RestSchemaValidator::AbstractRestSchemaValidator validator=new NullRestSchemaValidator(logger)) | |
create the object optionally with the given Logger and authenticator More... | |
hash< auto > | get (hash< auto > cx, *hash< auto > ah) |
default get handler for the base handler class | |
auto | handleExternalRequest (string method, string path, *hash< auto > body, hash< auto > cx={}) |
processes REST API calls outside the HTTP server More... | |
hash< HttpResponseInfo > | handleRequest (HttpListenerInterface listener, Socket s, hash< auto > cx, hash< auto > hdr, *data b) |
called by the HTTP server to handle incoming HTTP requests More... | |
logDebug (string fmt) | |
This method is called with debug log messages. More... | |
logError (string fmt) | |
This method is called with error log messages. More... | |
logInfo (string fmt) | |
This method is called with informational log messages. More... | |
string | name () |
returns the name of the root REST class | |
removeRootPath (reference< string > path) | |
default implementation is empty | |
requestDeserializationError (hash< auto > hdr, hash< auto > cx, string body) | |
default implementation is empty | |
responseSerializationError (hash< auto > cx, *hash< auto > aih, hash< auto > rv) | |
default implementation is empty | |
setLogger (*Logger::LoggerInterface logger) | |
Sets a new logger. | |
Public Member Methods inherited from RestHandler::AbstractRestClass | |
addClass (AbstractRestClass cls) | |
adds a REST class to the handler | |
hash< HttpServer::HttpHandlerResponseInfo > | handleRequest (HttpListenerInterface listener, RestHandler rh, Socket s, *list< string > cl, string mn, hash< auto > cx, *hash< auto > args) |
this method is called by the RestHandler class to match the right object with incoming requests | |
abstract string | name () |
this provides the name of the REST class | |
*AbstractRestClass | subClass (string name, hash< auto > cx, *hash< auto > args) |
this method will be called to find a sub-class More... | |
*AbstractRestClass | subClassImpl (string name, hash< auto > cx, *hash< auto > args) |
this method will be called to find a sub-class More... | |
Public Attributes | |
const | Err501 |
a hash for a 501 Unimplemented error message | |
const | Methods |
supported HTTP methods | |
Public Attributes inherited from RestHandler::AbstractRestClass | |
hash< string, AbstractRestClass > | class_hash |
class hash: name -> AbstractRestClass | |
const | RestBasicMethodSet = map {$1: True} |
set of REST class method names based on basic HTTP methods | |
Private Member Methods | |
checkExceptionSerializable (reference< hash< ExceptionInfo > > ex) | |
Recursively ensure that exception arguments are serializable. | |
hash< HttpHandlerResponseInfo > | dispatchRequest (HttpListenerInterface listener, Socket s, *list< string > class_list, string method_name, string path, hash< auto > cx, *hash< auto > args) |
Dispatches the request and returns the response. | |
*hash< auto > | errorResponseHeaders (hash< auto > cx) |
Retrieves headers for an error response. More... | |
hash< HttpHandlerResponseInfo > | returnRestException (hash< ExceptionInfo > ex) |
method that determines how exceptions handling REST requests are returned More... | |
Private Member Methods inherited from RestHandler::AbstractRestClass | |
hash< HttpServer::HttpHandlerResponseInfo > | dispatch (RestHandler rh, string mn, *hash< auto > ah, hash< auto > cx) |
this method is called to dispatch requests on the given object More... | |
hash< HttpServer::HttpHandlerResponseInfo > | dispatchStream (HttpListenerInterface listener, RestHandler rh, Socket s, string mn, *hash< auto > ah, hash< auto > cx) |
this method is called to dispatch streamed requests on the given object | |
*hash< string, bool > | doGetPossibleSubClasses (hash< auto > cx, *hash< auto > ah) |
returns a set of possible subclasses for a particular request More... | |
hash< HttpServer::HttpHandlerResponseInfo > | unknownSubClassError (string cls_name, hash< auto > cx, *hash< auto > ah) |
returns a 404 Not Found response when a request tries to access an unknown subclass More... | |
Private Attributes | |
RestSchemaValidator::AbstractRestSchemaValidator | validator |
REST schema validator. | |
this is the main handler class to be registered with the HttpServer
The RestHandler class should be subclassed to customize its behavior.
To provide for logging; the following methods can be reimplemented in subclasses:
In order to match REST requests under a root path, reimplement the following method in a subclass:
RestHandler::RestHandler::constructor | ( | *HttpServer::AbstractAuthenticator | auth, |
RestSchemaValidator::AbstractRestSchemaValidator | validator = new NullRestSchemaValidator() |
||
) |
create the object optionally with the given HttpServer::AbstractAuthenticator
auth | the authentication object to use to authenticate connections (see HttpServer::AbstractAuthenticator); if no HttpServer::AbstractAuthenticator object is passed, then by default no authentication will be required |
validator | a REST API schema validator object; if none is present, then the default REST de/serialization support is provided as documented in RestSchemaValidator::NullRestSchemaValidator |
RestHandler::RestHandler::constructor | ( | Logger::LoggerInterface | logger, |
*HttpServer::AbstractAuthenticator | auth, | ||
RestSchemaValidator::AbstractRestSchemaValidator | validator = new NullRestSchemaValidator(logger) |
||
) |
create the object optionally with the given Logger and authenticator
logger | the logger interface to use for the handler |
auth | the authentication object to use to authenticate connections (see HttpServer::AbstractAuthenticator); if no HttpServer::AbstractAuthenticator object is passed, then by default no authentication will be required |
validator | a REST API schema validator object; if none is present, then the default REST de/serialization support is provided as documented in RestSchemaValidator::NullRestSchemaValidator |
|
private |
Retrieves headers for an error response.
auto RestHandler::RestHandler::handleExternalRequest | ( | string | method, |
string | path, | ||
*hash< auto > | body, | ||
hash< auto > | cx = {} |
||
) |
processes REST API calls outside the HTTP server
Requests will be dispatched to REST classes registered with this object
method | the HTTP method; if the the method is unknown, an UNKNOWN-REST-METHOD exception is raised |
path | the URI path for the call |
body | the arguments to the call; note that arguments are combined with any arguments provided in path |
cx | simulated HTTP call context hash |
UNKNOWN-REST-METHOD | the HTTP method is unknown / unsupported |
INVALID-URI-PATH | URI cannot be parsed |
INVALID-REST-ARGS | invalid REST action |
REST-CLASS-ERROR | invalid / unknown REST class in URI path |
REST-ERROR | an error response was returned from the REST handler for the given method |
arg
key of the exception hash in the exceptions above contains the HTTP status code of the response409
status code is added in the arg
key of the exception hashhash< HttpResponseInfo > RestHandler::RestHandler::handleRequest | ( | HttpListenerInterface | listener, |
Socket | s, | ||
hash< auto > | cx, | ||
hash< auto > | hdr, | ||
*data | b | ||
) |
called by the HTTP server to handle incoming HTTP requests
Requests will be dispatched to REST classes registered with this object
listener | a listener API object |
s | the Socket object serving the request |
cx | call context hash; this hash will have the following keys:
|
hdr | incoming header hash; all keys will be converted to lower-case, additionally the following keys will be present:
|
b | message body, if any |
"code"
: the HTTP return code (see HttpServer::HttpCodes)"body"
: the message body to return in the response"close"
: (optional) set this key to True if the connection should be unconditionally closed when the handler returns"hdr"
: (optional) set this key to a hash of extra header information to be returned with the response RestHandler::RestHandler::logDebug | ( | string | fmt | ) |
This method is called with debug log messages.
reimplement in subclasses to provide for logging
RestHandler::RestHandler::logError | ( | string | fmt | ) |
This method is called with error log messages.
reimplement in subclasses to provide for logging
RestHandler::RestHandler::logInfo | ( | string | fmt | ) |
This method is called with informational log messages.
reimplement in subclasses to provide for logging
|
private |
method that determines how exceptions handling REST requests are returned
by default a 409 Conflict
response is returned with the serialized exception information in the message body