Skip to content

【Zig 日报】项目分享:Spider 一个专为 Zig 语言打造的 Web 框架 #328

@jiacai2050

Description

@jiacai2050

Spider 是一个专为 Zig 语言打造的 Web 框架,旨在提供类似 Django 或 Rails 的开发体验,同时具备 C 语言级别的性能。


Spider:Zig Web 框架

构建高性能 Web 服务器 —— 既有 Django 或 Rails 的便捷,又有 C 语言的性能。
内置功能丰富:PostgreSQL、SQLite、MySQL、JWT 认证、Google OAuth、WebSockets、HTMX 支持以及强大的模板引擎。

📖 完整文档: https://spiderme.org
🚀 启动工具包: SpiderStack


安装

快速安装 (推荐)

curl -fsSL https://spiderme.org/install.sh | bash
# 或指定版本
curl -fsSL https://spiderme.org/install.sh | bash -s -- --version v0.1.0

手动安装

build.zig 中添加 Spider 作为依赖:

zig fetch --save git+https://github.com/llllOllOOll/spider#main

并在 build.zig 中配置模块:

const spider_dep = b.dependency("spider", .{ .target = target });
const spider_mod = spider_dep.module("spider");

快速上手

const std = @import("std");
const spider = @import("spider");

// 嵌入模板(自动检测)
pub const spider_templates = @import("embedded_templates.zig").EmbeddedTemplates;

pub fn main() void {
    var server = spider.app();
    defer server.deinit();

    server
        .get("/", homeHandler)
        .get("/users/:id", userHandler)
        .post("/users", createUserHandler)
        .listen(.{ .port = 3000 }) catch {};
}

fn homeHandler(c: *spider.Ctx) !spider.Response {
    return c.json(.{ .message = "Hello from Spider!" }, .{});
}

主要特性

1. 强大的上下文 (*spider.Ctx)

每个处理器(handler)都会接收一个 *spider.Ctx,你可以在其中完成所有操作,无需手动处理分配器或 I/O。

  • 响应方式:
    • c.json(data, opts): 返回 JSON。
    • c.html(content, opts): 返回 HTML 字符串。
    • c.view("name", data, opts): 渲染模板文件。
    • c.redirect("/path"): 重定向。
  • 请求解析:
    • c.param("id"): 获取 URL 参数。
    • c.query("q"): 获取查询参数。
    • c.bodyJson(User): 解析 JSON 请求体到结构体。

2. 模板引擎

Spider 的模板引擎基于 AST 解析器,支持:

  • 变量与条件: { variable }, if (condition) { ... }, else
  • 循环: for (items) |item| { ... }
  • 布局继承: 使用 extends "layout"
  • 组件 (Components): 支持帕斯卡命名法(PascalCase)组件及命名插槽(Named Slots)。
  • Markdown: 自动检测 .md 文件并渲染。

3. 数据库支持

  • PostgreSQL: 原生 Zig 驱动(无需 libpq),支持连接池、事务、参数化查询。
  • SQLite/MySQL: 同样开箱即用。

4. 认证与安全

  • JWT: 内置 jwtSignjwtVerify
  • OAuth: 简单的 Google OAuth 流程支持。
  • Middleware: 支持全局、路径前缀或分组路由中间件。

5. 开发体验

  • 热重载 (Live Reload): 在开发模式下,修改模板或静态文件会自动刷新浏览器。
  • 环境变量: 内置 .env 文件支持。
  • 静态文件: 自动托管 ./public/ 目录。

路由分组与中间件

server.group("/admin", &.{authMiddleware, adminMiddleware}, adminRoutes);

部署建议

  • Embed 模式 (推荐): 模板被编译进二进制文件中,无需在服务器运行目录保留任何文件。
  • Docker 支持: 文档提供了针对这两种模式的 Dockerfile 示例。

为什么选择 Spider?

  • 零内存分配负担: 基于 Arena Allocator,每个请求结束后自动清理。
  • Zig 原生: 利用 Zig 的编译期特性实现高性能和类型安全。
  • 开发效率: 涵盖了现代 Web 开发所需的几乎所有工具。

作者:Seven (erivan cerqueira)
GitHub: https://github.com/llllOllOOll/spider

加入我们

Zig 中文社区是一个开放的组织,我们致力于推广 Zig 在中文群体中的使用,有多种方式可以参与进来:

  1. 供稿,分享自己使用 Zig 的心得
  2. 改进 ZigCC 组织下的开源项目
  3. 加入微信群Telegram 群组

Metadata

Metadata

Assignees

No one assigned

    Labels

    日报daily report

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions