I did some testing with delphi clients and a Java server. We are deciding between SOAP and REST. I’ve implemented client applications in Delphi using GZip. It is a very simple implementation and it brings a great result. The larger the volume of data, greater the difference using GZip compression. The bandwidth is also a factor that influences a lot. Let’s see the implementations.

REST with GZIP

Implementation of compression with REST is extremely simple. It’s just a matter of correctly setting the “Compressor” attribute of the TIDHttp component. I’m using TIdCompressorZLib.

IdHttp := TIdHTTP.Create(nil); IdHttp.Compressor := TIdCompressorZLib.Create(IdHttp);

NOTE: This does not work in Delphi XE2. Access violation occurs. Works in XE3.

SOAP with GZIP

Implementation with SOAP is a bit more complicated. For my tests I used the THTTPrio component events.

procedure HTTPRIOHTTPWebNode1BeforePost(const HTTPReqResp: THTTPReqResp; Data: Pointer); const INTERNET_OPTION_HTTP_DECODING = 65; contentEncodingHeader = 'Accept-Encoding: gzip, deflate'; var Flag: LongBool; begin Flag := True; HttpAddRequestHeaders(Data, PChar(contentEncodingHeader), Length(contentEncodingHeader), HTTP_ADDREQ_FLAG_ADD); InternetSetOption(Data, INTERNET_OPTION_HTTP_DECODING, PChar(@Flag), SizeOf(Flag)); end;

Benchmarks

These tests were done in order to compare the implementation of SOAP and REST. I used the framework developed by a brazilian programmer, Fabricio Colombo, the Delphi REST Client API. Tests were performed with a bandwidth limited to 512 Kbps. Information is in milliseconds.

The difference with GZip is big. Do not be fooled by the chart! It’s a logarithmic scale.