Middleware Server Kuda untuk Paging Data JSON di Restfull API
$ boss install https://github.com/claudneysessa/Horse-CSResponsePaginationJika Anda menggunakan middleware Jhonson, deklarasi Anda harus datang sebelum deklarasi Jhonson, dan jika Anda juga menggunakan middleware kompresi, deklarasi Anda harus datang setelah deklarasi kompresi.
THorse
.Use(Compression())
.Use(CSResponsePagination()) // <<-- Here!
.Use(Jhonson);
Untuk mengaktifkan paging data, cukup informasikan header permintaan parameter berikut:
| Parameter | jenis | keterangan |
|---|---|---|
| membatasi | bilangan bulat | Jumlah catatan per halaman |
| mengimbangi | bilangan bulat | Halaman yang akan ditampilkan |
Contoh Server Kuda Menggunakan 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 .Saat memilih untuk menggunakan pagination di badan hasil, csResponsepagination akan menghasilkan pengembalian yang disesuaikan yang menyajikan data pagination di badan hasil.
| Bidang | keterangan |
|---|---|
| menghitung | Jumlah Catatan Total |
| halaman | Total halaman yang ada |
| membatasi | Jumlah Catatan Total Per Halaman |
| mengimbangi | Halaman yang dipilih |
| ukuran | Jumlah catatan untuk halaman yang dipilih |
| data | Array hasil |
Hasil JSON:
{
"count" : 564 ,
"pages" : 113 ,
"limit" : 5 ,
"offset" : 2 ,
"size" : 5 ,
"data" : []
}Kode contoh:
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 .Saat memilih untuk menggunakan pagination di header respons, csresponsepagination akan menghasilkan beberapa informasi yang dipersonalisasi yang menyajikan data di header respons.
| Bidang | keterangan |
|---|---|
| X-pagination-count | Jumlah Catatan Total |
| Halaman X-Paginasi | Total halaman yang ada |
| X-pagination-limit | Jumlah Catatan Total Per Halaman |
| X-pagination-offset | Halaman yang dipilih |
| Ukuran X-Paginasi | Jumlah catatan untuk halaman yang dipilih |
Kode contoh:
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 .Jika ada kebutuhan untuk memodifikasi deskripsi elemen respons, ada objek konfigurasi yang dapat digunakan dengan memasukkan unit [horse.csresponsepagination.types.pas] dalam unit API seperti yang ditunjukkan pada contoh di bawah ini.
Dengan cara ini kita dapat mengubah deskripsi baik pengembalian melalui tubuh dan pengembalian melalui responsheader.
Kode contoh:
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 .