環境準備

在開始編碼之前,請確保您的系統已安裝以下組件:

您可以通過操作系統的軟件包管理器或從官方來源下載并安裝Ulfius和Jansson。


初始化Ulfius框架

我們的API將管理一個簡單的圖書模型,每本書包含一個ID和一個名稱。以下是設置Ulfius框架的基本代碼:

#include 
#define PORT 8080

int main(void) {
 struct _u_instance instance;

 if (ulfius_init_instance(&instance, PORT, NULL, NULL) != U_OK) {
 fprintf(stderr, "Error initializing instancen");
 return 1;
 }

 // 在此處聲明端點

 if (ulfius_start_framework(&instance) == U_OK) {
 printf("Server started on port %dn", instance.port);
 getchar(); // 等待用戶輸入以停止服務器
 } else {
 fprintf(stderr, "Error starting frameworkn");
 }

 ulfius_stop_framework(&instance);
 ulfius_clean_instance(&instance);
 return 0;
}

上述代碼初始化了Ulfius框架實例并指定了端口號。通過ulfius_start_framework啟動服務器后,您可以通過指定的端口訪問API。


創建圖書的POST端點

為了實現圖書的創建功能,我們需要定義一個POST端點。以下是實現代碼:

int callback_create_book(const struct _u_request *request, struct _u_response *response, void *user_data) {
 json_t *json_body = ulfius_get_json_body_request(request, NULL);

 const char *name = json_string_value(json_object_get(json_body, "name"));

 // 將書籍添加到存儲的邏輯

 json_decref(json_body);
 ulfius_set_string_body_response(response, 200, "Book created");
 return U_CALLBACK_CONTINUE;
}

在啟動框架之前,需將該端點添加到實例中:

ulfius_add_endpoint_by_val(&instance, "POST", "/book", NULL, 0, &callback_create_book, NULL);

實現其他CRUD操作

除了創建功能,您還可以實現以下操作:

每個操作的實現結構與創建功能類似,您可以根據需求定義相應的回調函數。


日志記錄功能

為了方便調試和監控,您可以實現一個簡單的日志記錄功能,用于記錄每個HTTP請求的信息:

#include 
void log_request(const struct _u_request *request) {
 time_t now = time(NULL);
 char formatted_time[20];
 strftime(formatted_time, 20, "%Y-%m-%d %H:%M:%S", localtime(&now));
 printf("[%s] Received %s request for %sn", formatted_time, request->http_verb, request->http_url);
}

總結

通過本教程,您學習了如何使用Ulfius框架和Jansson庫在C語言中構建一個基本的RESTful API。Ulfius負責處理HTTP請求,而Jansson則用于管理JSON數據。結合C語言的性能優勢,您可以高效地開發輕量級的Web API。

需要注意的是,C語言雖然功能強大,但在處理外部輸入時需要特別小心,務必驗證和凈化傳入數據,以避免潛在的安全漏洞。

祝您在C語言項目開發中一切順利!


完整源代碼:GitHub鏈接
完整文檔:Ulfius官方文檔

原文鏈接: https://gotz.medium.com/building-a-restful-api-with-ulfius-in-c-d1ce6b979508

上一篇:

2025年十大PHP REST API框架

下一篇:

使用Node.js創建REST API
#你可能也喜歡這些API文章!

我們有何不同?

API服務商零注冊

多API并行試用

數據驅動選型,提升決策效率

查看全部API→
??

熱門場景實測,選對API

#AI文本生成大模型API

對比大模型API的內容創意新穎性、情感共鳴力、商業轉化潛力

25個渠道
一鍵對比試用API 限時免費

#AI深度推理大模型API

對比大模型API的邏輯推理準確性、分析深度、可視化建議合理性

10個渠道
一鍵對比試用API 限時免費