Home

Awesome

horse-compression

<b>horse-compression</b> is a official middleware for compressing content in APIs developed with the <a href="https://github.com/HashLoad/horse">Horse</a> framework. <br>We created a channel on Telegram for questions and support:<br><br> <a href="https://t.me/hashload"> <img src="https://img.shields.io/badge/telegram-join%20channel-7289DA?style=flat-square"> </a>

⚙️ 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:

☑️ 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 := 0 to 1000 do
        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;

procedure GetPing(Req: THorseRequest; Res: THorseResponse; Next: TNextProc);
var
  I: Integer;
  LPong: TJSONArray;
  LJson: TJSONObject;
begin
  LPong := TJSONArray.Create;
  for I := 0 to 1000 do
  begin
    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

Using middleware, the response was approximately 67 turn 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.