Home

Awesome

HTTP

HTTP core types for Zig inspired by Rust http.

Build Status License Requirements

⚠️ I'm currently renovating an old house which does not allow me to work on requestz, h11 and http anymore. Feel free to fork or borrow some ideas if there are any good ones :)

Installation

http is available on astrolabe.pm via gyro

gyro add ducdetronquito/http

Usage

Create an HTTP request

const Request = @import("http").Request;
const std = @import("std");

var request = try Request.builder(std.testing.allocator)
    .get("https://ziglang.org/")
    .header("GOTTA-GO", "FAST")
    .body("");
defer request.deinit();

Create an HTTP response

const Response = @import("http").Request;
const StatusCode = @import("http").StatusCode;
const std = @import("std");

var response = try Response.builder(std.testing.allocator)
    .status(.Ok)
    .header("GOTTA-GO", "FAST")
    .body("");
defer response.deinit();

API Reference

Structures

Headers

An HTTP header list
// The default constructor
fn init(allocator: *Allocator) Headers
// Add a header name and value
fn append(self: *Headers, name: []const u8, value: []const u8) !void
// Retrieve the first matching header
fn get(self: Headers, name: []const u8) ?Header
// Retrieve a list of matching headers
fn list(self: Headers, name: []const u8) ![]Header
// Retrieve the number of headers
fn len(self: Headers) usize
// Retrieve all headers
fn items(self: Headers) []Header

Header issues are tracked here: #2

Request

An HTTP request object produced by the request builder.
const Request = struct {
    method: Method,
    uri: Uri,
    version: Version,
    headers: Headers,
    body: []const u8,
};
// The default constructor to start building a request
fn builder(allocator: *Allocator) RequestBuilder
// Release the memory allocated by the headers
fn deinit(self: *Request) void

RequestBuilder

The request builder.
// The default constructor
default(allocator: *Allocator) RequestBuilder
// Set the request's payload.
// This function returns the final request objet or a potential error
// collected during the build steps
fn body(self: *RequestBuilder, value: []const u8) RequestError!Request
// Shortcut to define a CONNECT request to the provided URI
fn connect(self: *RequestBuilder, _uri: []const u8) *RequestBuilder
// Shortcut to define a DELETE request to the provided URI
fn delete(self: *RequestBuilder, _uri: []const u8) *RequestBuilder
// Shortcut to define a GET request to the provided URI
fn get(self: *RequestBuilder, _uri: []const u8) *RequestBuilder
// Shortcut to define an HEAD request to the provided URI
fn head(self: *RequestBuilder, _uri: []const u8) *RequestBuilder
// Set a request header name and value
fn header(self: *RequestBuilder, name: []const u8, value: []const u8) *RequestBuilder
// Set the request's method
fn method(self: *RequestBuilder, value: Method) *RequestBuilder
// Shortcut to define an OPTIONS request to the provided URI
fn options(self: *RequestBuilder, _uri: []const u8) *RequestBuilder
// Shortcut to define a PATCH request to the provided URI
fn patch(self: *RequestBuilder, _uri: []const u8) *RequestBuilder
// Shortcut to define a POST request to the provided URI
fn post(self: *RequestBuilder, _uri: []const u8) *RequestBuilder
// Shortcut to define a PUT request to the provided URI
fn put(self: *RequestBuilder, _uri: []const u8) *RequestBuilder
// Shortcut to define a TRACE request to the provided URI
fn trace(self: *RequestBuilder, _uri: []const u8) *RequestBuilder
// Set the request's URI
fn uri(self: *RequestBuilder, value: []const u8) *RequestBuilder
// Set the request's protocol version
fn version(self: *RequestBuilder, value: Version) *RequestBuilder

Response

An HTTP response object produced by the response builder.
const Response = struct {
    status: StatusCode,
    version: Version,
    headers: Headers,
    body: []const u8,
};
// The default constructor to start building a response
fn builder(allocator: *Allocator) ResponseBuilder

ResponseBuilder

The response builder.
// The default constructor
default(allocator: *Allocator) ResponseBuilder
// Set the response's payload.
// This function returns the final response objet or a potential error
// collected during the build steps
fn body(self: *ResponseBuilder, value: []const u8) ResponseError!Response
// Set a response header name and value
fn header(self: *ResponseBuilder, name: []const u8, value: []const u8) *ResponseBuilder
// Set the response's status code
fn status(self: *ResponseBuilder, value: StatusCode) *ResponseBuilder
// Set the response's protocol version
fn version(self: *ResponseBuilder, value: Version) *ResponseBuilder

Uri

A valid URI object

Read more

Enumerations

Method

The available request methods.

StatusCode

The available response status codes.

A lot; the list is available on MDN.

Version

The available protocol versions.

Errors

HeadersError
RequestError
ResponseError

License

http is released under the BSD Zero clause license. 🎉🍻

The URI parser is a fork of Vexu's zuri under the MIT License.