我正在尝试用C / C ++做一个JSON Restful Web服务。 我尝试过Axis2 / C和Staff,它非常适合XML序列化/反序列化,但不适用于JSON。
答案 0 :(得分:11)
您可能需要查看Casablanca中介绍的Herb Sutter's blog。
答案 1 :(得分:3)
您可以查看ffead-cpp。除了为json和restful Web服务提供支持外,它还包含更多功能。这个框架可能对你的情况来说太重了。
答案 2 :(得分:3)
试试ngrest。这是一个简单但fast C ++ RESTful JSON Web服务框架。它可以部署在Apache2,Nginx或自己的简单http服务器之上。
关于带有JSON的Axis2 / C。似乎官方Axis2 / C不再维护。所以Axis2 / C已经过时(但仍然有效)。
axis2c-unofficial项目中提供了对Axis2 / C的JSON支持。
有关于如何在Linux,Windows using binary package,Windows from source code下安装带有JSON支持的Axis2 / C的安装手册。
您可以使用JSON模式中的客户(REST)示例(可从员工源代码的staff/samples/rest/webclient
目录获得)与WSF员工一起尝试。
答案 3 :(得分:3)
少数支持使用c创建休息服务的库,例如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;
}
答案 4 :(得分:2)
对于C ++ Web服务,我使用以下堆栈:
答案 5 :(得分:2)
尝试https://github.com/babelouest/ulfius很棒的库来构建C / C ++ Restful API。可以支持所有平台:Linux,FreeBSD,Windows等
答案 6 :(得分:2)
看看Oat++
它具有:
示例端点:
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"}
答案 7 :(得分:1)
有一个JIRA project解决了AXIS2 / C中JSON的支持
我在我的项目中实现并且我使用编写器(Badgerfish约定)进行管理但仍然在尝试与读者一起管理。
在内存中管理堆栈似乎更复杂。
答案 8 :(得分:1)
包含多个JSON,code generator and a new JSON API。内存管理是自动的。
代码生成器非常有用。以JSON-RPC and REST examples代码段
为例{ "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命令行代码生成器显示了使用.json文件作为模板读取和写入JSON数据的API代码,我发现这对于节省写入时间很有用用于填充和提取JSON数据的API代码。也可以使用此工具生成JSONPath查询代码。
答案 9 :(得分:1)
您可能想看看webcc。
这是基于Boost.Asio(1.66+)的轻量级C ++ REST和SOAP客户端和服务器库。
这是很有希望的,并且正在积极开发中。
有很好的示例来演示如何创建服务器和客户端。
优势:
缺点: