Middleware del servidor de caballos para paginar datos JSON en RESTFULL de APIS
$ boss install https://github.com/claudneysessa/Horse-CSResponsePaginationSi está utilizando el middleware Jhonson, su declaración debe presentarse antes de la declaración de Jhonson, y si también usa el middleware de compresión, su declaración debe venir después de la declaración de compresión.
THorse
.Use(Compression())
.Use(CSResponsePagination()) // <<-- Here!
.Use(Jhonson);
Para habilitar la paginación de los datos, solo informe al encabezado de la solicitud los siguientes parámetros:
| Parámetro | tipo | descripción |
|---|---|---|
| límite | entero | Número de registros por página |
| compensar | entero | página que se mostrará |
Ejemplo de servidor de caballos utilizando CsesponsePagination:
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 .Al elegir usar la paginación en el cuerpo de resultados, Csesponsepagination generará un rendimiento personalizado que presenta los datos de paginación en el cuerpo de resultados.
| Campo | descripción |
|---|---|
| contar | Número total de registros |
| páginas | Total de las páginas existentes |
| límite | Número total de registros por página |
| compensar | Página seleccionada |
| tamaño | Número de registros para la página seleccionada |
| datos | Matriz de resultados |
Resultado JSON:
{
"count" : 564 ,
"pages" : 113 ,
"limit" : 5 ,
"offset" : 2 ,
"size" : 5 ,
"data" : []
}Código de muestra:
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 .Al elegir usar la paginación en el encabezado de respuesta, Csesponsepagination generará información personalizada que presenta los datos en el encabezado de respuesta.
| Campo | descripción |
|---|---|
| Conteo de x-paginación | Número total de registros |
| X-Pagination Páginas | Total de las páginas existentes |
| Timonel | Número total de registros por página |
| Compensación de x-paginación | Página seleccionada |
| Tamaño X | Número de registros para la página seleccionada |
Código de muestra:
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 .Si es necesario modificar la descripción de los elementos de respuesta, existe el objeto de configuración que se puede utilizar al incluir la unidad [Horse.CsesponsePagination.Types.pas] en la unidad API como se muestra en el siguiente ejemplo.
De esta manera, podemos cambiar la descripción tanto de la devolución a través del cuerpo como el retorno a través de los reputes.
Código de muestra:
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 .