RESTful是一種設(shè)計風(fēng)格,是基于HTTP協(xié)議之上的。它遵循一定的原則和約束條件來組織系統(tǒng)結(jié)構(gòu),并通過HTTP協(xié)議進行通信。RESTful的核心是資源(resource)和行為(verb),使用統(tǒng)一的接口和標(biāo)準的HTTP方法(GET、POST、PUT、DELETE)來實現(xiàn)對資源的操作。RESTful通常使用JSON作為數(shù)據(jù)傳輸?shù)母袷健?/p>
#include <stdio.h>
#include <stdlib.h>
#include <jansson.h>
#include <mongoose.h>
//處理HTTP請求
static void handle_request(struct mg_connection *nc, struct http_message *hm) {
json_t *root;
json_error_t error;
//創(chuàng)建JSON對象
root = json_loads("{\"name\":\"Tom\",\"age\":29}", 0, &error);
//將JSON對象轉(zhuǎn)成字符串
char *json_str = json_dumps(root, JSON_ENCODE_ANY);
//發(fā)送HTTP響應(yīng)
mg_printf(nc, "HTTP/1.1 200 OK\r\n"
"Content-Type: application/json\r\n"
"Content-Length: %d\r\n"
"\r\n"
"%s", strlen(json_str), json_str);
//釋放內(nèi)存
json_decref(root);
free(json_str);
}
int main(void) {
struct mg_mgr mgr;
struct mg_connection *nc;
//初始化mongoose
mg_mgr_init(&mgr, NULL);
nc = mg_bind(&mgr, "http://localhost:8000", handle_request);
if (nc == NULL) {
printf("Failed to create listener\n");
return EXIT_FAILURE;
}
//開始監(jiān)聽HTTP請求
mg_set_protocol_http_websocket(nc);
for (;;) {
mg_mgr_poll(&mgr, 1000);
}
//釋放mongoose
mg_mgr_free(&mgr);
return EXIT_SUCCESS;
}
以上代碼實現(xiàn)了一個簡單的HTTP服務(wù),它監(jiān)聽本地端口8000,接收HTTP請求并返回一段JSON字符串。handle_request函數(shù)中創(chuàng)建了一個JSON對象,然后將它轉(zhuǎn)成一個字符串,最后通過HTTP響應(yīng)發(fā)送出去。在發(fā)送HTTP響應(yīng)時,需要指定Content-Type為application/json,這樣客戶端才能正確解析返回的JSON字符串。