推荐一个 C++ RESTful 框架

2021-12-24 16:55:55 +08:00
 Calatrava

基本上做 Web 开发需要的功能,比如 json ,静态文件,form ,Cookie 都支持的比较完整。而且还是一个纯异步的 web 引擎,性能相当可观。

#include "wfrest/HttpServer.h"
using namespace wfrest;

int main()
{
    HttpServer svr;

    // curl -v http://ip:port/hello
    svr.GET("/hello", [](const HttpReq *req, HttpResp *resp)
    {
        resp->String("world\n");
    });
    // curl -v http://ip:port/data
    svr.GET("/data", [](const HttpReq *req, HttpResp *resp)
    {
        std::string str = "Hello world";
        resp->String(std::move(str));
    });

    // curl -v http://ip:port/post -d 'post hello world'
    svr.POST("/post", [](const HttpReq *req, HttpResp *resp)
    {
        // reference, no copy here
        std::string& body = req->body();
        fprintf(stderr, "post data : %s\n", body.c_str());
    });

    if (svr.start(8888) == 0)
    {
        getchar();
        svr.stop();
    } else
    {
        fprintf(stderr, "Cannot start server");
        exit(1);
    }
    return 0;
}

项目地址: https://github.com/wfrest/wfrest

6855 次点击
所在节点    C++
39 条回复
hotcool100
2021-12-24 17:00:48 +08:00
我疯了用 C++ 写 RESTful
rophie123
2021-12-24 17:07:35 +08:00
Qt 也有个,之前写过
hushulin
2021-12-24 17:15:20 +08:00
工作还是不够饱和
ipwx
2021-12-24 17:21:11 +08:00
不错不错。好像还是基于 sogou workflow 库的,也不算是 start from stratch 。

@hotcool100 @hushulin 当你碰巧有一个 C++ 服务需要暴露简单的 API ,这东西就非常有用了。
hushulin
2021-12-24 17:30:08 +08:00
@ipwx 假如这个 C++程序员不懂其它 web 开发语言,这是个好选择
Buges
2021-12-24 17:40:51 +08:00
@ipwx c/cpp 服务需要 Web API 的,一律用 CGI ,简单省事,不用写这些东西折磨自己。
zachlhb
2021-12-24 18:47:03 +08:00
是什么想不开要拿 c++写 restful ?
ipwx
2021-12-24 18:59:09 +08:00
@Buges @hushulin 不,如果这个 C++ 服务不是一个 CURD 服务呢?如果它本身是个像 redis 一样的多线程(有后台队列)的服务程序呢?不是那种来一个请求启动一个进程,而是一个常驻内存、用满整个服务器核心的 C++ 程序呢?

比如,写了个特殊领域的小型数据库。写了个特殊的调度程序。写了个常驻内存的( C++ 算法)服务程序,每个请求都要占用所有 CPU 并行计算,更多的请求进 C++ 内部的队列,一个一个处理。这种场景下真的很有用,就是要在 C++ 程序里面内嵌一个 HTTP API 。

你们多少有些按照自己的经验,小看了 C++ 程序的多样化。
Calatrava
2021-12-24 19:00:25 +08:00
@zachlhb 还是有一些需要高性能的场合的。而且懂点 C++的,这个库用起来不比别的语言复杂。
ipwx
2021-12-24 19:02:07 +08:00
@Buges @zachlhb 而且在我描述的这些场景里面,用 C++ 实现不是因为 C++ 程序员不懂其他语言,而是从效率和实现难度上,用 C++ 内嵌 HTTP API 都是最优选择。包括算法的例子,可能算法需要读取数据,这一步延迟高,所以不得不常驻内存。把 C++ 编译成 Python 模块,可能还不如内嵌一个这个。反正处理的请求是相当简单的
ragnaroks
2021-12-24 19:17:09 +08:00
只写脚本的是理解不了一个可执行程序不但有图形界面还有 HTTP 接口的
Buges
2021-12-24 19:42:13 +08:00
@ipwx
针对你说的“碰巧有一个 C++ 服务需要暴露简单的 API”,我觉得起个 CGI ,简单的 IPC 好过引入这么一大坨东西,太多无谓的复杂度了。
shayuvpn0001
2021-12-24 22:26:26 +08:00
见过 MIPS 处理器的路由器里面,用 printf 输出 web 页面的。资源有限,又需要实现一些功能的场景,还是有很多的。
ffire
2021-12-25 00:01:01 +08:00
看了这贴,多少能理解为啥现在的 web ,呃,不知道如何形容,就说这么让人难受吧,更让人难受的是,他发展的趋势是朝着更让人难受的方向。
tairan2006
2021-12-25 13:36:05 +08:00
某些场景还是有用的

但是写 web 的话,std::string 就能把你搞的欲仙欲死(
jazzg62
2021-12-25 15:09:37 +08:00
之前用过,当作 electron 的子进程来执行,但是,这玩意是真麻烦,艹
iQXQZX
2021-12-25 15:45:06 +08:00
还有一个叫 libhv
Calatrava
2021-12-25 15:54:15 +08:00
@iQXQZX 还有一个 header only 的 cpp-httplib ,但是纯同步的。
c0xt30a
2021-12-25 19:26:14 +08:00
进来之前,我还以为楼主重新发现了 CROW: https://github.com/ipkn/crow
进来之后,才发现这是另一个轮子。

这很 C++ -:)
ipwx
2021-12-25 21:11:04 +08:00
@Buges 。。。不是,你是不能理解 C++ 需要对外提供服务嘛?

服务内核是完全独立的,外部需要一个 gui 去操纵这个服务。C++ 服务可能部署在 vps 或者阿里云或者 kubernetes 里面,gui 管理程序可能是 qt 或者 c# 写的。这种场景你给 c++ 一个 http 接口难道不是最优解嘛?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/824264

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX