Skip to content

API 文档 ​

概述 ​

UVHTTP 提供 C API,用于构建 HTTP/1.1 和 WebSocket 服务器。

平台支持 ​

当前支持: Linux

未来计划: macOS, Windows, FreeBSD, WebAssembly (WASM) 和其他 Unix-like 系统

UVHTTP 目前针对 Linux 平台优化。

核心模块 ​

服务器(uvhttp_server) ​

uvhttp_server_t 是服务器的核心结构。

创建服务器 ​

c
uvhttp_error_t uvhttp_server_new(uv_loop_t* loop, uvhttp_server_t** server);

启动服务器 ​

c
uvhttp_error_t uvhttp_server_listen(uvhttp_server_t* server, const char* host, int port);

停止服务器 ​

c
uvhttp_error_t uvhttp_server_free(uvhttp_server_t* server);

路由(uvhttp_router) ​

uvhttp_router_t 提供路由功能。

创建路由 ​

c
uvhttp_error_t uvhttp_router_new(uvhttp_router_t** router);

添加路由 ​

c
uvhttp_error_t uvhttp_router_add_route(uvhttp_router_t* router, const char* path, uvhttp_request_handler_t handler);

请求(uvhttp_request) ​

uvhttp_request_t 表示一个 HTTP 请求。

获取请求方法 ​

c
uvhttp_method_t uvhttp_request_get_method(uvhttp_request_t* req);

获取请求路径 ​

c
const char* uvhttp_request_get_path(uvhttp_request_t* req);

获取请求头部 ​

c
const char* uvhttp_request_get_header(uvhttp_request_t* req, const char* name);

获取请求体 ​

c
const char* uvhttp_request_get_body(uvhttp_request_t* req, size_t* len);

响应(uvhttp_response) ​

uvhttp_response_t 用于构建 HTTP 响应。响应对象由框架创建并传递给请求处理函数。

设置状态码 ​

c
uvhttp_error_t uvhttp_response_set_status(uvhttp_response_t* response, int status);

设置响应头部 ​

c
uvhttp_error_t uvhttp_response_set_header(uvhttp_response_t* response, const char* name, const char* value);

设置响应体 ​

c
uvhttp_error_t uvhttp_response_set_body(uvhttp_response_t* response, const char* body, size_t length);

发送响应 ​

c
uvhttp_error_t uvhttp_response_send(uvhttp_response_t* response);

错误处理 ​

所有可能失败的函数都返回 uvhttp_error_t:

c
typedef enum {
    UVHTTP_OK = 0,
    UVHTTP_ERROR = -1,
    UVHTTP_ERR_INVALID_PARAM = -2,
    UVHTTP_ERR_OUT_OF_MEMORY = -3,
    // ... 更多错误码
} uvhttp_error_t;

错误检查 ​

c
uvhttp_error_t result = uvhttp_server_listen(server, "0.0.0.0", 8080);
if (result != UVHTTP_OK) {
    fprintf(stderr, "Error: %s\n", uvhttp_error_string(result));
    return 1;
}

完整示例 ​

c
#include <uvhttp.h>
#include <stdio.h>
#include <string.h>

int index_handler(uvhttp_request_t* request, uvhttp_response_t* response) {
    uvhttp_response_set_status(response, 200);
    uvhttp_response_set_header(response, "Content-Type", "text/html");
    uvhttp_response_set_body(response, "<h1>Hello, UVHTTP!</h1>", strlen("<h1>Hello, UVHTTP!</h1>"));
    return uvhttp_response_send(response);
}

int api_handler(uvhttp_request_t* request, uvhttp_response_t* response) {
    uvhttp_response_set_status(response, 200);
    uvhttp_response_set_header(response, "Content-Type", "application/json");
    const char* json_body = "{\"message\":\"API response\"}";
    uvhttp_response_set_body(response, json_body, strlen(json_body));
    return uvhttp_response_send(response);
}

int main() {
    uv_loop_t* loop = uv_default_loop();
    uvhttp_server_t* server;
    uvhttp_error_t result = uvhttp_server_new(loop, &server);
    if (result != UVHTTP_OK) {
        fprintf(stderr, "Failed to create server: %s\n", uvhttp_error_string(result));
        return 1;
    }

    uvhttp_router_t* router = NULL;
    uvhttp_router_new(&router);
    uvhttp_server_set_router(server, router);

    uvhttp_router_add_route(router, "/", index_handler);
    uvhttp_router_add_route(router, "/api", api_handler);

    result = uvhttp_server_listen(server, "0.0.0.0", 8080);
    if (result != UVHTTP_OK) {
        fprintf(stderr, "Failed to start server: %s\n", uvhttp_error_string(result));
        uvhttp_server_free(server);
        return 1;
    }

    printf("Server running at http://localhost:8080\n");
    uv_run(loop, UV_RUN_DEFAULT);

    uvhttp_server_free(server);
    return 0;
}

更多 API ​

完整的 API 文档包含以下核心模块:

  • 服务器(uvhttp_server) - 服务器的创建、启动和关闭
  • 路由(uvhttp_router) - 路由管理与参数提取
  • 请求(uvhttp_request) - HTTP 请求处理
  • 响应(uvhttp_response) - HTTP 响应构建
  • WebSocket(uvhttp_websocket) - WebSocket 连接管理

基于 MIT 许可证发布