flexible http client and server supporting different http providers
- Promise based
- GET, POST, PUT, DELETE http verbs
- Ability to swap out http providers (via
IHttpProvider
) - currently uses modified versions of Haxe's http - Ability to follow redirects
- Ability to retry failed requests
- Optional request queue (important when certain apis require requests in order, for example when using nonces)
- Ability to transform requests / responses (using
IHttpRequestTransformer
orIHttpResponseTransformer
); - Simple, but flexible, interface
var client = new HttpClient();
client.followRedirects = false; // defaults to true
client.retryCount = 5; // defaults to 0
client.retryDelayMs = 0; // defaults to 1000
client.provider = new MySuperHttpProvider(); // defaults to "DefaultHttpProvider"
client.requestQueue = QueueFactory.instance.createQueue(QueueFactory.SIMPLE_QUEUE); // defaults to "NonQueue"
client.defaultRequestHeaders = ["someheader" => "somevalue"];
client.requestTransformers = [new MyRequestTransformerA(), new MyRequestTransformerB()];
client.responseTransformers = [new MyResponseTransformerA(), new MyResponseTransformerB()];
client.get('http://someurl?param1=value1', ["param2" => "value2"], ["header1" => "header value 1"]).then(response -> {
var foo = response.bodyAsJson.bar;
}, (error:HttpError) -> {
// error
});
var client = new HttpClient();
client.post('http://someurl?param1=value1', {foo: "bar"}, ["param2" => "value2"], ["header1" => "header value 1"]).then(response -> {
var foo = response.bodyAsJson.bar;
}, (error:HttpError) -> {
// error
});
(all parameters except the url are optional)
var httpServer = new HttpServer();
httpServer.onRequest = (httpRequest, httpResponse) -> {
return new Promise((resolve, reject) -> {
var userId = httpRequest.queryParams.get("userId");
if (userId == null) { // exceptions will be sent back as 500's
throw "no user id";
}
if (Std.parseInt(userId) == null) { // you can also customize errors by using HttpError
var error = new HttpError(500);
error.body = Bytes.ofString("user is not a number");
reject(error);
return;
}
httpResponse.write("this is the response for " + userId);
resolve(httpResponse);
});
}
httpServer.start(1234);
(see tests for more examples)