Pascal Horse:轻量高效的Web框架
项目概述
Pascal Horse是一个基于Delphi/Object Pascal开发的轻量级Web框架,专为构建高性能的RESTful API和Web应用程序而设计。该项目由HashLoad团队维护,采用开源模式,为Pascal开发者提供了现代化的Web开发工具。
核心特性
1. 轻量高效
极简的依赖关系
低内存占用
快速启动和响应
2. 模块化设计
中间件支持
插件化架构
易于扩展
3. RESTful友好
直观的路由系统
HTTP方法支持(GET、POST、PUT、DELETE等)
请求/响应处理
4. 跨平台
Windows、Linux、macOS支持
与多种Pascal编译器兼容
安装与配置
通过Boss安装(推荐)
boss install github.com/HashLoad/horse
手动安装
克隆仓库到本地
将Horse目录添加到项目搜索路径
在项目中引用必要的单元
基础示例
简单的”Hello World”服务器
program HelloWorldServer;
{$APPTYPE CONSOLE}
uses
Horse;
begin
// 定义路由
THorse.Get('/',
procedure(Req: THorseRequest; Res: THorseResponse; Next: TProc)
begin
Res.Send('Hello World from Pascal Horse!');
end);
// 启动服务器,监听3000端口
THorse.Listen(3000);
end.RESTful API示例
program RESTfulAPI;
uses
Horse,
Horse.Jhonson, // JSON中间件
System.JSON;
type
TUser = record
ID: Integer;
Name: string;
Email: string;
end;
var
Users: TArray<TUser>;
// 获取所有用户
procedure GetUsers(Req: THorseRequest; Res: THorseResponse; Next: TProc);
var
JSONArray: TJSONArray;
User: TUser;
begin
JSONArray := TJSONArray.Create;
try
for User in Users do
begin
JSONArray.AddElement(
TJSONObject.Create
.AddPair('id', TJSONNumber.Create(User.ID))
.AddPair('name', User.Name)
.AddPair('email', User.Email)
);
end;
Res.Send<TJSONArray>(JSONArray);
except
JSONArray.Free;
raise;
end;
end;
// 创建新用户
procedure CreateUser(Req: THorseRequest; Res: THorseResponse; Next: TProc);
var
JSON: TJSONObject;
NewUser: TUser;
begin
JSON := Req.Body<TJSONObject>;
try
NewUser.ID := Length(Users) + 1;
NewUser.Name := JSON.GetValue<string>('name');
NewUser.Email := JSON.GetValue<string>('email');
SetLength(Users, Length(Users) + 1);
Users[High(Users)] := NewUser;
Res.Status(201).Send<TJSONObject>(
TJSONObject.Create
.AddPair('id', TJSONNumber.Create(NewUser.ID))
.AddPair('name', NewUser.Name)
.AddPair('email', NewUser.Email)
);
finally
JSON.Free;
end;
end;
begin
// 使用JSON中间件
THorse.Use(Jhonson);
// 定义路由
THorse.Get('/users', GetUsers);
THorse.Post('/users', CreateUser);
// 启动服务器
THorse.Listen(9000);
end.中间件使用示例
program MiddlewareExample;
uses
Horse,
Horse.BasicAuthentication,
Horse.Jhonson;
// 自定义中间件:请求日志
procedure LoggingMiddleware(Req: THorseRequest; Res: THorseResponse; Next: TProc);
begin
Writeln(Format('[%s] %s %s', [
FormatDateTime('yyyy-mm-dd hh:nn:ss', Now),
Req.RawWebRequest.Method,
Req.RawWebRequest.PathInfo
]));
Next();
end;
// 认证回调函数
function DoAuthentication(const AUsername, APassword: string): Boolean;
begin
// 简单的认证逻辑
Result := (AUsername = 'admin') and (APassword = 'secret');
end;
begin
// 使用中间件
THorse.Use(LoggingMiddleware);
THorse.Use(Jhonson);
THorse.Use(HorseBasicAuthentication(DoAuthentication));
// 受保护的路由
THorse.Get('/protected',
procedure(Req: THorseRequest; Res: THorseResponse; Next: TProc)
begin
Res.Send('This is a protected resource');
end);
// 公开路由
THorse.Get('/public',
procedure(Req: THorseRequest; Res: THorseResponse; Next: TProc)
begin
Res.Send('This is a public resource');
end);
THorse.Listen(8080);
end.高级功能
1. 路由参数
THorse.Get('/users/:id',
procedure(Req: THorseRequest; Res: THorseResponse; Next: TProc)
var
UserID: string;
begin
UserID := Req.Params['id'];
Res.Send(Format('User ID: %s', [UserID]));
end);2. 查询参数
THorse.Get('/search',
procedure(Req: THorseRequest; Res: THorseResponse; Next: TProc)
var
Query, Sort: string;
begin
Query := Req.Query['q'];
Sort := Req.Query['sort'];
// 处理搜索逻辑
end);3. 文件上传
THorse.Post('/upload',
procedure(Req: THorseRequest; Res: THorseResponse; Next: TProc)
var
FilePath: string;
begin
if Req.Files.Count > 0 then
begin
FilePath := 'uploads/' + Req.Files[0].FileName;
Req.Files[0].SaveToFile(FilePath);
Res.Send('File uploaded successfully');
end
else
Res.Status(400).Send('No file uploaded');
end);生态系统
Pascal Horse拥有丰富的插件生态系统:
Horse.Jhonson: JSON处理中间件
Horse.BasicAuthentication: 基础认证中间件
Horse.CORS: 跨域资源共享支持
Horse.Compression: 响应压缩
Horse.OctetStream: 二进制流处理
Horse.SocketIO: WebSocket支持
性能优势
原生编译: 直接编译为机器码,无需虚拟机
低资源消耗: 内存占用小,适合嵌入式或资源受限环境
高并发: 基于事件驱动的架构,支持高并发请求
快速启动: 冷启动时间短,适合微服务架构
适用场景
RESTful API开发
微服务架构
企业内部工具
原型快速开发
需要与现有Delphi/Pascal代码集成的Web服务
总结
Pascal Horse为Pascal开发者提供了一个现代化、高效的Web开发框架,填补了Pascal生态系统中Web开发工具的空白。其简洁的API设计、模块化架构和良好的性能表现,使得它成为构建Web服务和API的优秀选择。无论是小型项目还是企业级应用,Pascal Horse都能提供稳定可靠的基础设施支持。
通过活跃的社区和持续的开发维护,Pascal Horse正在不断完善,为Pascal语言在Web开发领域开辟了新的可能性。




还没有评论,来说两句吧...