本文作者:icy

BrookFreePascal:轻量高效的FreePascal网络开发库

icy 今天 9 抢沙发
BrookFreePascal:轻量高效的FreePascal网络开发库摘要: BrookFreePascal:轻量高效的FreePascal网络开发库 项目概述 BrookFreePascal 是一个基于 FreePascal 的轻量级 Web 应用程序开发...

BrookFreePascal:轻量高效的FreePascal网络开发库

BrookFreePascal:轻量高效的FreePascal网络开发库

项目概述

BrookFreePascal 是一个基于 FreePascal 的轻量级 Web 应用程序开发框架,旨在为 Pascal 开发者提供简单、高效的方式来构建 Web 应用和 API 服务。该项目由 risoflora 维护,继承了 Brook Framework 的设计理念,专门为 FreePascal 编译器优化适配。

核心特性

1. 轻量级设计

BrookFreePascal 采用简洁的架构设计,不依赖复杂的第三方库,核心文件数量少,易于理解和定制。

2. 路由系统

提供灵活的路由机制,支持 RESTful 风格的路由定义:

text
uses
  BrookRouter, BrookUtils;

procedure GetUsers(ARequest: TBrookRequest; AResponse: TBrookResponse);
begin
  // 处理GET /users 请求
  AResponse.Content := '用户列表';
end;

procedure GetUserById(ARequest: TBrookRequest; AResponse: TBrookResponse);
begin
  // 处理GET /users/:id 请求
  AResponse.Content := '用户ID: ' + ARequest.Params['id'];
end;

initialization
  BrookRouter.Get('/users', @GetUsers);
  BrookRouter.Get('/users/:id', @GetUserById);

3. 中间件支持

支持中间件机制,方便实现认证、日志记录等功能:

text
type
  TAuthMiddleware = class
    class procedure Execute(ARequest: TBrookRequest; 
      AResponse: TBrookResponse; var AHandled: Boolean);
  end;

class procedure TAuthMiddleware.Execute(ARequest: TBrookRequest;
  AResponse: TBrookResponse; var AHandled: Boolean);
begin
  if not IsAuthenticated(ARequest) then
  begin
    AResponse.Code := 401;
    AResponse.Content := '未授权访问';
    AHandled := True;
  end;
end;

4. 模板引擎

内置简单的模板支持,也可轻松集成其他模板引擎:

text
procedure ShowHomePage(ARequest: TBrookRequest; AResponse: TBrookResponse);
var
  Content: string;
begin
  Content := '<html><body>';
  Content := Content + '<h1>欢迎使用 BrookFreePascal</h1>';
  Content := Content + '<p>当前时间: ' + DateTimeToStr(Now) + '</p>';
  Content := Content + '</body></html>';
  
  AResponse.Content := Content;
  AResponse.ContentType := 'text/html; charset=utf-8';
end;

快速开始示例

示例1:简单的Web服务器

text
program SimpleWebServer;

{$mode objfpc}{$H+}

uses
  BrookApplication, BrookRouter, BrookUtils, BrookHttpConsts,
  BrookRequest, BrookResponse, SysUtils;

// 处理首页请求
procedure HandleHome(ARequest: TBrookRequest; AResponse: TBrookResponse);
begin
  AResponse.Send('Hello, BrookFreePascal!', 'text/plain', 200);
end;

// 处理API请求
procedure HandleAPI(ARequest: TBrookRequest; AResponse: TBrookResponse);
var
  jsonResponse: string;
begin
  jsonResponse := '{"status": "success", "message": "API is working", "timestamp": "' + 
                  DateTimeToStr(Now) + '"}';
  AResponse.Send(jsonResponse, 'application/json', 200);
end;

// 处理表单提交
procedure HandleFormSubmit(ARequest: TBrookRequest; AResponse: TBrookResponse);
var
  name, email: string;
begin
  name := ARequest.Params['name'];
  email := ARequest.Params['email'];
  
  AResponse.SendFmt('收到表单数据:姓名=%s, 邮箱=%s', [name, email], 
                    'text/plain', 200);
end;

begin
  // 注册路由
  BrookRouter.Get('/', @HandleHome);
  BrookRouter.Get('/api', @HandleAPI);
  BrookRouter.Post('/submit', @HandleFormSubmit);
  
  // 启动服务器,默认端口8080
  BrookApp.Run;
end.

示例2:RESTful API 服务

text
program RESTfulAPI;

{$mode objfpc}{$H+}

uses
  BrookApplication, BrookRouter, BrookUtils,
  BrookRequest, BrookResponse, SysUtils, Classes, fpjson, jsonparser;

type
  TProduct = record
    ID: Integer;
    Name: string;
    Price: Currency;
  end;

var
  Products: array[1..3] of TProduct;

// 初始化示例数据
procedure InitializeData;
begin
  Products[1].ID := 1;
  Products[1].Name := '笔记本电脑';
  Products[1].Price := 5999.99;
  
  Products[2].ID := 2;
  Products[2].Name := '智能手机';
  Products[2].Price := 2999.50;
  
  Products[3].ID := 3;
  Products[3].Name := '平板电脑';
  Products[3].Price := 1999.00;
end;

// 获取所有产品
procedure GetAllProducts(ARequest: TBrookRequest; AResponse: TBrookResponse);
var
  jsonArray: TJSONArray;
  jsonObject: TJSONObject;
  i: Integer;
begin
  jsonArray := TJSONArray.Create;
  try
    for i := 1 to 3 do
    begin
      jsonObject := TJSONObject.Create;
      jsonObject.Add('id', Products[i].ID);
      jsonObject.Add('name', Products[i].Name);
      jsonObject.Add('price', Products[i].Price);
      jsonArray.Add(jsonObject);
    end;
    
    AResponse.Send(jsonArray.AsJSON, 'application/json', 200);
  finally
    jsonArray.Free;
  end;
end;

// 获取单个产品
procedure GetProductById(ARequest: TBrookRequest; AResponse: TBrookResponse);
var
  id: Integer;
  jsonObject: TJSONObject;
  i: Integer;
begin
  id := StrToIntDef(ARequest.Params['id'], 0);
  
  for i := 1 to 3 do
  begin
    if Products[i].ID = id then
    begin
      jsonObject := TJSONObject.Create;
      try
        jsonObject.Add('id', Products[i].ID);
        jsonObject.Add('name', Products[i].Name);
        jsonObject.Add('price', Products[i].Price);
        
        AResponse.Send(jsonObject.AsJSON, 'application/json', 200);
      finally
        jsonObject.Free;
      end;
      Exit;
    end;
  end;
  
  AResponse.Send('{"error": "产品未找到"}', 'application/json', 404);
end;

begin
  InitializeData;
  
  // 注册RESTful路由
  BrookRouter.Get('/api/products', @GetAllProducts);
  BrookRouter.Get('/api/products/:id', @GetProductById);
  
  WriteLn('RESTful API 服务已启动,监听端口 8080');
  WriteLn('访问 http://localhost:8080/api/products 获取产品列表');
  
  BrookApp.Run;
end.

项目优势

  1. Pascal原生支持:完全使用FreePascal编写,无需额外依赖

  2. 性能优秀:编译为本地代码,执行效率高

  3. 跨平台:支持Windows、Linux、macOS等操作系统

  4. 学习曲线平缓:对于有Pascal基础的开发者非常友好

  5. 资源占用少:适合嵌入式或资源受限环境

适用场景

  • 小型Web应用和API服务

  • 企业内部管理系统

  • 物联网设备的控制面板

  • 教学和原型开发

  • 需要高性能和低资源占用的Web服务

获取与使用

  1. 克隆项目仓库:

text
git clone https://github.com/risoflora/brookfreepascal.git
  1. 查看示例代码:

text
cd brookfreepascal/examples
  1. 使用FreePascal编译:

text
fpc your_program.pas

总结

BrookFreePascal 为 FreePascal 开发者提供了一个简单而强大的Web开发解决方案。虽然它可能不像其他主流Web框架那样功能全面,但其简洁性、高性能和对Pascal语言的原生支持使其在某些特定场景下具有独特优势。对于希望使用Pascal进行Web开发的程序员来说,BrookFreePascal是一个值得尝试的优秀选择。

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

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

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

支付宝扫一扫打赏

微信扫一扫打赏

阅读
分享

发表评论

快捷回复:

验证码

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

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