Horse Server Middleware für Paging -JSON -Daten in APIs RESTFOFL
$ boss install https://github.com/claudneysessa/Horse-CSResponsePaginationWenn Sie die Jhonson Middleware verwenden, muss Ihre Erklärung vor der Jhonson -Deklaration vorhanden sein. Wenn Sie auch die Komprimierung Middleware verwenden, muss Ihre Erklärung nach der Kompressionserklärung vorliegen.
THorse
.Use(Compression())
.Use(CSResponsePagination()) // <<-- Here!
.Use(Jhonson);
Um die Daten zu aktivieren, informieren Sie einfach den Header über die Anforderung der folgenden Parameter:
| Parameter | Typ | Beschreibung |
|---|---|---|
| Limit | ganze Zahl | Anzahl der Datensätze pro Seite |
| Offset | ganze Zahl | Seite zu angezeigt werden |
Beispiel Pferdeserver mit CSResponsepagination:
uses
Horse,
Horse.Compression,
Horse.Jhonson,
Horse.CSResponsePagination,
System.SysUtils,
System.JSON,
DBClient,
DataSet.Serialize;
begin
THorse
.Use(Compression())
.Use(CSResponsePagination())
.Use(Jhonson);
THorse.Get( ' /testeCSPagination ' ,
procedure(Req: THorseRequest; Res: THorseResponse; Next: TProc)
var
DataSet: TClientDataSet;
begin
DataSet := TClientDataSet.Create( nil );
try
DataSet.LoadFromFile( ' dataSetExample.xml ' );
Res.Send<TJsonArray>(DataSet.ToJsonArray);
finally
DataSet.Free;
end ;
end );
THorse.Listen( 8888 );
end .Bei der Wahl der Pagination im Ergebniskörper erzeugt CSResponsepagination eine angepasste Rendite, die die Paginationsdaten im Ergebniskörper darstellt.
| Feld | Beschreibung |
|---|---|
| zählen | Gesamtzahl der Datensätze |
| Seiten | Gesamt vorhandene Seiten |
| Limit | Gesamtzahl der Datensätze pro Seite |
| Offset | Ausgewählte Seite |
| Größe | Anzahl der Datensätze für die ausgewählte Seite |
| Daten | Ergebnisarray |
JSON -Ergebnis:
{
"count" : 564 ,
"pages" : 113 ,
"limit" : 5 ,
"offset" : 2 ,
"size" : 5 ,
"data" : []
}Beispielcode:
begin
THorse
.Use(Compression())
.Use(CSResponsePagination(false)) // <<-- paginateOnHeaders = false
.Use(Jhonson);
THorse.Get( ' /testeCSPagination ' ,
procedure(Req: THorseRequest; Res: THorseResponse; Next: TProc)
var
DataSet: TClientDataSet;
begin
DataSet := TClientDataSet.Create( nil );
try
DataSet.LoadFromFile( ' dataSetExample.xml ' );
Res.Send<TJsonArray>(DataSet.ToJsonArray);
finally
DataSet.Free;
end ;
end );
THorse.Listen( 8888 );
end .Bei der Verwendung der Pagination im Antwortheader generiert CSResponsepagination einige personalisierte Informationen, in denen die Daten im Antwortheader präsentiert werden.
| Feld | Beschreibung |
|---|---|
| X-Pagination | Gesamtzahl der Datensätze |
| X-Paginationsseiten | Gesamt vorhandene Seiten |
| X-Pagination-Limit | Gesamtzahl der Datensätze pro Seite |
| X-Pagination-Offset | Ausgewählte Seite |
| X-paginiergroß | Anzahl der Datensätze für die ausgewählte Seite |
Beispielcode:
begin
THorse
.Use(Compression())
.Use(CSResponsePagination(true)) // <<-- paginateOnHeaders = true
.Use(Jhonson);
THorse.Get( ' /testeCSPagination ' ,
procedure(Req: THorseRequest; Res: THorseResponse; Next: TProc)
var
DataSet: TClientDataSet;
begin
DataSet := TClientDataSet.Create( nil );
try
DataSet.LoadFromFile( ' dataSetExample.xml ' );
Res.Send<TJsonArray>(DataSet.ToJsonArray);
finally
DataSet.Free;
end ;
end );
THorse.Listen( 8888 );
end .Wenn die Beschreibung der Antwortelemente geändert werden muss, gibt es das Konfigurationsobjekt, das durch Einbeziehung der Einheit [Pferd.csresponsepagination.types.pas] in die API -Einheit verwendet werden kann, wie im folgenden Beispiel gezeigt.
Auf diese Weise können wir die Beschreibung sowohl der Rückkehr über den Körper als auch über die Rückkehr über ResponseHeaders ändern.
Beispielcode:
var
PaginationConfig: TPaginationConfig;
begin
PaginationConfig := TPaginationConfig.Create;
PaginationConfig.paginateOnHeaders := False;
PaginationConfig.body.count := ' count ' ;
PaginationConfig.body.page := ' pages ' ;
PaginationConfig.body.limit := ' limit ' ;
PaginationConfig.body.offset := ' offset ' ;
PaginationConfig.body.size := ' size ' ;
PaginationConfig.body.data := ' data ' ;
// or
PaginationConfig.paginateOnHeaders := True;
PaginationConfig.header.count := ' X-Total-Count ' ;
PaginationConfig.header.page := ' X-Total-Pages ' ;
PaginationConfig.header.limit := ' X-Page-Limit ' ;
PaginationConfig.header.offset := ' X-Page-Offset ' ;
PaginationConfig.header.size := ' X-Page-Size ' ;
THorse
.Use(Compression())
.Use(CSResponsePagination(PaginationConfig))
.Use(Jhonson);
THorse.Get( ' /testeCSPagination ' ,
procedure(Req: THorseRequest; Res: THorseResponse; Next: TProc)
var
DataSet: TClientDataSet;
begin
DataSet := TClientDataSet.Create( nil );
try
DataSet.LoadFromFile( ' dataSetExample.xml ' );
Res.Send<TJsonArray>(DataSet.ToJsonArray);
finally
DataSet.Free;
end ;
end );
THorse.Listen( 8888 );
end .