在C/C++中实现JSON RESTful服务的方法
Ways to implement a JSON RESTful service in C/C++
我正在尝试用C/C++做一个JSON Restful web服务。我尝试过Axis2/C和Staff,它们非常适合XML序列化/反序列化,但不适合JSON。
您可能想看看Herb Sutter的博客中介绍的卡萨布兰卡。
有少数库支持使用c创建rest服务,例如restinio:
#include <restinio/all.hpp>
int main()
{
restinio::run(
restinio::on_this_thread()
.port(8080)
.address("localhost")
.request_handler([](auto req) {
return req->create_response().set_body("Hello, World!").done();
}));
return 0;
}
tryhttps://github.com/babelouest/ulfius构建C/C++Restful API的伟大库。可以支持所有平台:Linux、FreeBSD、Windows和其他
您可以查看ffead-cpp。除了提供对json和restfull web服务的支持外,它还包括更多功能。不过,对于您的情况来说,这个框架可能太重了。
对于C++web服务,我使用以下堆栈:
- ipkn/crow C++微网框架
- 用于json序列化/反序列化的nlohmann/json
看看Oat++
它有:
- 具有URL参数映射的URL路由
- 支持Swagger UI端点注释
- 支持JSON的对象映射
示例终点:
ENDPOINT("GET", "users/{name}", getUserByName, PATH(String, name)) {
auto userDto = UserDto::createShared();
userDto->name = name;
return createDtoResponse(Status::CODE_200, userDto);
}
卷曲:
$ curl http://localhost:8000/users/john
{"name":"john"}
您可能需要了解一下webcc。
这是一个基于Boost.Asio(1.66+).的用于嵌入目的的轻量级C++HTTP客户端和服务器库
它很有前景,正在积极开发中。
它包括许多示例来演示如何创建服务器和客户端。
有一个JIRA项目解决了AXIS2/C中对JSON的支持
我在我的项目中实施了,我与作者一起管理(Badgerfish惯例),但我仍然在努力与读者一起管理
使用内存中的堆栈进行管理似乎更为复杂。
JSON和JSONPath在gsoap中支持C和C++,并提供了新的代码生成器和新的JSON API,让您快速入门。
包括了几个JSON、JSON-RPC和REST示例。内存管理是自动的。
代码生成器可能很有用。以json.org的menu.json
片段为例:
{ "menu": {
"id": "file",
"value": "File",
"popup": {
"menuitem": [
{"value": "New", "onclick": "CreateNewDoc()"},
{"value": "Open", "onclick": "OpenDoc()"},
{"value": "Close", "onclick": "CloseDoc()"}
]
}
}
}
gsoap命令jsoncpp -M menu.json
生成此代码以填充JSON值:
value x(ctx);
x["menu"]["id"] = "file";
x["menu"]["value"] = "File";
x["menu"]["popup"]["menuitem"][0]["value"] = "New";
x["menu"]["popup"]["menuitem"][0]["onclick"] = "CreateNewDoc()";
x["menu"]["popup"]["menuitem"][1]["value"] = "Open";
x["menu"]["popup"]["menuitem"][1]["onclick"] = "OpenDoc()";
x["menu"]["popup"]["menuitem"][2]["value"] = "Close";
x["menu"]["popup"]["menuitem"][2]["onclick"] = "CloseDoc()";
该工具还可以生成读取解析的JSON值和JSONPath代码。
编辑
为了澄清,jsoncpp命令行代码生成器显示了API代码,通过使用.JSON文件作为模板来读取和写入JSON数据,我发现这有助于节省编写API代码以填充和提取JSON数据的时间。JSONPath查询代码也可以使用此工具生成。
对于C语言的web服务,您可以利用像sulius、civetweb:这样的库
https://github.com/babelouest/ulfius
https://github.com/civetweb/civetweb/blob/master/docs/Embedding.md
对于C++中的web服务,您可以利用libhv、restbed:等库
https://github.com/ithewei/libhv
https://github.com/Corvusoft/restbed
- Active Directory:从网络服务帐户下运行的Windows服务调用ADsOpenObject时失败
- 检测win32服务创建和删除的最佳方法
- 使用 mod_gsoap 部署服务时,如何在 Gsoap 中更改 soap 上下文的模式?
- 当服务中的事件被触发时,如何将响应从服务发送回客户端?
- gRPC 生成的代码缺少服务实现
- C# DLL 从C++应用程序调用 SOAP Web 服务
- 在 Winrt/C++ 中使用应用服务
- 将第二个 GATT 服务添加到 Movesense 容器
- 从运行服务的应用程序代码中提取窗口句柄
- 对于使用高级服务的分钟数和应付金额,我不断得到相同的数字
- 通过 Tor 服务C++ socket.io 客户端
- 创建服务失败0x6f7存根收到错误数据
- Windows 后台服务(系统配置文件)无法使用 C++ 访问 win 10 上的用户 appData 文件夹?
- 打开 Docker 撰写文件中每个服务的外壳选项卡
- 在 Linux 上C++:在作为 systemd 服务运行时侦听键盘输入
- 使用 libcurl 调用 Amazon s3 RESTful 服务
- 在C/C++中实现JSON RESTful服务的方法
- 在NAT后面实现restful Web服务
- 如何使用c++语言和JSON解析器创建Restful Web服务
- web服务-适用于我的c/c++库的swig、soap或restful