Middleware de serveur de chevaux pour la pagination des données JSON dans les API RESTFULL
$ boss install https://github.com/claudneysessa/Horse-CSResponsePaginationSi vous utilisez le middleware Jhonson, votre déclaration doit être présentée avant la déclaration de Jhonson, et si vous utilisez également le middleware de compression, votre déclaration doit venir après la déclaration de compression.
THorse
.Use(Compression())
.Use(CSResponsePagination()) // <<-- Here!
.Use(Jhonson);
Pour permettre la pagination des données, informez simplement l'en-tête de la réquisition des paramètres suivants:
| Paramètre | taper | description |
|---|---|---|
| limite | entier | Nombre d'enregistrements par page |
| compenser | entier | page à afficher |
Exemple de serveur de chevaux à l'aide de 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 .Lors du choix d'utiliser la pagination dans le corps du résultat, CSResponsepagination générera un retour personnalisé présentant les données de pagination dans le corps de résultat.
| Champ | description |
|---|---|
| compter | Nombre total d'enregistrements |
| pages | Pages existantes totales |
| limite | Nombre total d'enregistrements par page |
| compenser | Page sélectionnée |
| taille | Nombre d'enregistrements pour la page sélectionnée |
| données | Tableau des résultats |
Résultat JSON:
{
"count" : 564 ,
"pages" : 113 ,
"limit" : 5 ,
"offset" : 2 ,
"size" : 5 ,
"data" : []
}Exemple de code:
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 .Lors du choix d'utiliser la pagination dans l'en-tête de réponse, CSResponsepagination générera des informations personnalisées présentant les données dans l'en-tête de réponse.
| Champ | description |
|---|---|
| Comptoir x-pagination | Nombre total d'enregistrements |
| X-pages-pages | Pages existantes totales |
| X-pagination-limite | Nombre total d'enregistrements par page |
| X-Pagination-Offset | Page sélectionnée |
| Size x-pagination | Nombre d'enregistrements pour la page sélectionnée |
Exemple de code:
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 .S'il est nécessaire de modifier la description des éléments de réponse, il existe l'objet de configuration qui peut être utilisé en incluant l'unité [Horse.csResponsepagination.Types.pas] dans l'unité API comme indiqué dans l'exemple ci-dessous.
De cette façon, nous pouvons modifier la description du retour via le corps et le retour via desheadaires de réponse.
Exemple de code:
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 .