-
使用说明
要使用来自客户端的请求启用 JSON 数据分页,需要传递请求的 HEADER 的以下参数
X-Paginate = true;
要控制分页,您可以在请求的 URL 中发送以下参数
limit=X(这是分页记录限制)
page=X(此参数告知应该返回哪个分页页面)
-
安装
boss install github.com/bittencourtthulio/Horse-Paginate
样例
localhost:9000/ping?limit=10&page=5http://www.seusite.com:9000/ping?limit=10&page=5
-
源码
unit Unit2;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ComCtrls, Vcl.ExtCtrls,IdHTTP,IdSSLOpenSSL,System.JSON,REST.Json;
type
THorse_Server = class(TForm)
Panel1: TPanel;
Button1: TButton;
richedit: TRichEdit;
procedure Button1Click(Sender: TObject);
private
function GetURLAsString(const aurl: string): string;
function Format_JSON(FJSON: String): String;
public
{ Public declarations }
end;
var
Horse_Server: THorse_Server;
implementation
uses
Horse,
Horse.Paginate,
Horse.Jhonson,
DataSet.Serialize,
// System.JSON,
DBClient;
{$R *.dfm}
//https://www.youtube.com/watch?v=Bs1G1-ZzTgE&list=PLvrBgLo9icwM9i2RPjrSXRHg0WdCUQsc4&index=1&t=234s
procedure THorse_Server.Button1Click(Sender: TObject);
begin
THorse
.Use(Paginate)
.Use(Jhonson);
THorse.Get('/ping',
procedure(Req: THorseRequest; Res: THorseResponse; Next: TProc)
var
LDataSet: TClientDataSet;
begin
LDataSet := TClientDataSet.Create(nil);
try
LDataSet.LoadFromFile('items.xml');
Res.Send<TJSONArray>(LDataSet.ToJsonArray);
finally
LDataSet.Free;
end;
end);
THorse.Listen(9009);
richedit.Lines.Add(Format_JSON(GetURLAsString('http://localhost:9009/ping'))) ;
end;
//json
function THorse_Server.GetURLAsString(const aurl: string): string;
var
lHTTP: TIdHTTP;
begin
lHTTP := TIdHTTP.Create(nil);
try
lHTTP.IOHandler := TIdSSLIOHandlerSocketOpenSSL.Create(lHTTP);
Result := lHTTP.Get(aURL);
finally
lHTTP.Free;
end;
end;
//格式化json 需要引用单元:System.JSON,REST.Json
function THorse_Server.Format_JSON(FJSON: String): String;
var
JObjectData : TJSONObject;
JArrayJSON : TJSONArray;
begin
if TJSONObject.ParseJSONValue(FJSON) is TJSONObject then begin
JObjectData := TJSONObject.ParseJSONValue(FJSON) as TJSONObject;
Result := TJson.Format(JObjectData);
JObjectData.Free;
end else if TJSONObject.ParseJSONValue(FJSON) is TJSONArray then begin
JArrayJSON := TJSONObject.ParseJSONValue(FJSON) as TJSONArray;
Result := TJson.Format(JArrayJSON);
JArrayJSON.DisposeOf; //移动端有区别,否则和VCL没有区别。
end else
Result := FJSON;
end;
end.
-
输出json运行效果
-
分页
源码下载: