Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

History

50 Commits

Repository files navigation

horse-compression

horse-compression is an official middleware for compressing content in APIs developed with the Horse framework.
We created a channel on Telegram for questions and support:

⚙️ Installation

Installation is done using the boss install command:

boss install horse-compression

If you choose to install manually, simply add the following folders to your project, in Project > Options > Resource Compiler > Directories and Conditionals > Include file search path

../horse-compression/src

✔️ Compatibility

This middleware is compatible with projects developed in:

  • Delphi
  • Lazarus

☑️ Compression types

Currently, the middleware is prepared to compress the data using DEFLATE and GZIP.

TypeDelphiLazarus
DEFLATE ✔️ ✔️
GZIP ✔️

⚡️ Quickstart Delphi

uses
Horse,
Horse.Jhonson,
Horse.Compression, // It's necessary to use the unit
System.JSON;
begin
THorse
.Use(Compression()) // Must come before Jhonson middleware
.Use(Jhonson);
// You can set compression threshold:// THorse.Use(Compression(1024));
THorse.Get('/ping',
procedure(Req: THorseRequest; Res: THorseResponse; Next: TProc)
var
I: Integer;
LPong: TJSONArray;
begin
LPong := TJSONArray.Create;
for I := 0to1000do
LPong.Add(TJSONObject.Create(TJSONPair.Create('ping', 'pong')));
Res.Send(LPong);
end);
THorse.Listen(9000);
end;

⚡️ Quickstart Lazarus

{$MODE DELPHI}{$H+}uses{$IFDEF UNIX}{$IFDEF UseCThreads}
cthreads,
{$ENDIF}{$ENDIF}
Horse,
Horse.Jhonson,
Horse.Compression, // It's necessary to use the unit
fpjson,
SysUtils;
procedureGetPing(Req: THorseRequest; Res: THorseResponse; Next: TNextProc);
var
I: Integer;
LPong: TJSONArray;
LJson: TJSONObject;
begin
LPong := TJSONArray.Create;
for I := 0to1000dobegin
LJson := TJSONObject.Create;
LJson.Add('ping', 'pong');
LPong.Add(LJson);
end;
Res.Send<TJSONArray>(LPong);
end;
begin
THorse
.Use(Compression()) // Must come before Jhonson middleware
.Use(Jhonson);
// You can set compression threshold:// THorse.Use(Compression(1024));
THorse.Get('/ping', GetPing);
THorse.Listen(9000);
end.

🚀 Statistics

When using the middleware, the response size was approximately 67 times smaller. Data were collected using the project available within the samples (delphi) folder. To default, responses less than or equal to 1024 bytes will not be compressed.

PropertyWithoutWith
Time(ms)108126
Size(bytes)15.770236

⚠️ License

horse-compression is free and open-source middleware licensed under the MIT License.

About

Middleware for Compression in HORSE

Topics

Resources

Stars

38 stars

Watchers

8 watching

Forks

Releases

Packages

Contributors

Languages