本文作者:icy

Pascal Horse:轻量高效的Web框架

icy 昨天 21 抢沙发
Pascal Horse:轻量高效的Web框架摘要: Pascal Horse:轻量高效的Web框架 项目概述 Pascal Horse是一个基于Delphi/Object Pascal开发的轻量级Web框架,专为构建高性能的REST...

Pascal Horse:轻量高效的Web框架

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安装(推荐)

text
boss install github.com/HashLoad/horse

手动安装

  1. 克隆仓库到本地

  2. 将Horse目录添加到项目搜索路径

  3. 在项目中引用必要的单元

基础示例

简单的”Hello World”服务器

text
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示例

text
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.

中间件使用示例

text
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. 路由参数

text
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. 查询参数

text
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. 文件上传

text
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支持

性能优势

  1. 原生编译: 直接编译为机器码,无需虚拟机

  2. 低资源消耗: 内存占用小,适合嵌入式或资源受限环境

  3. 高并发: 基于事件驱动的架构,支持高并发请求

  4. 快速启动: 冷启动时间短,适合微服务架构

适用场景

  • RESTful API开发

  • 微服务架构

  • 企业内部工具

  • 原型快速开发

  • 需要与现有Delphi/Pascal代码集成的Web服务

总结

Pascal Horse为Pascal开发者提供了一个现代化、高效的Web开发框架,填补了Pascal生态系统中Web开发工具的空白。其简洁的API设计、模块化架构和良好的性能表现,使得它成为构建Web服务和API的优秀选择。无论是小型项目还是企业级应用,Pascal Horse都能提供稳定可靠的基础设施支持。

通过活跃的社区和持续的开发维护,Pascal Horse正在不断完善,为Pascal语言在Web开发领域开辟了新的可能性。

horse.zip
类型:压缩文件|已下载:0|下载方式:免费下载
立即下载
文章版权及转载声明

作者:icy本文地址:https://www.zelig.cn/2026/03/329.html发布于 昨天
文章转载或复制请以超链接形式并注明出处软角落-SoftNook

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏

阅读
分享

发表评论

快捷回复:

验证码

评论列表 (暂无评论,21人围观)参与讨论

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