Skip to content

carlos-gn/requezt

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

requezt

An ergonomic HTTP Client for Zig.

  • Plain bodies, JSON, urlencoded
  • Custom request headers
  • Response headers (parsed + raw access)
  • JSON response parsing
  • Built on std.http.Client

Example

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

pub fn main() !void {
    var gpa: std.heap.DebugAllocator(.{}) = .init;
    defer _ = gpa.deinit();

    var client = requezt.Client.init(gpa.allocator(), .{});
    defer client.deinit();

    var resp = try client.get("https://httpbin.org/get", .{});
    defer resp.deinit();

    std.debug.print("{s}\n", .{resp.body()});
}

JSON

Parse responses directly into Zig structs:

const User = struct {
    id: u32,
    name: []const u8,
    email: []const u8,
};

var resp = try client.get("https://api.example.com/user/1", .{});
defer resp.deinit();

const user = try resp.json(User);
defer user.deinit();

std.debug.print("Hello, {s}!\n", .{user.value.name});

Send JSON bodies:

const CreateUser = struct {
    name: []const u8,
    email: []const u8,
};

var resp = try client.postJson("https://api.example.com/users", CreateUser{
    .name = "Alice",
    .email = "[email protected]",
}, .{});
defer resp.deinit();

Headers

// Default headers for all requests
var client = requezt.Client.init(allocator, .{
    .headers = .{ .authorization = "Bearer token" },
});

// Per-request headers
var resp = try client.get("https://api.example.com", .{
    .headers = .{ .content_type = "application/json" },
});

Requirements

  • Zig 0.15.2 or later

License

MIT

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages