在C / C ++中实现JSON RESTful服务的方法

时间:2012-03-20 14:18:27

标签: c++ c json web-services

我正在尝试用C / C ++做一个JSON Restful Web服务。 我尝试过Axis2 / C和Staff,它非常适合XML序列化/反序列化,但不适用于JSON。

10 个答案:

答案 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支持。

有关于如何在LinuxWindows using binary packageWindows 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++

它具有:

  • 具有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"}

答案 7 :(得分:1)

有一个JIRA project解决了AXIS2 / C中JSON的支持 我在我的项目中实现并且我使用编写器(Badgerfish约定)进行管理但仍然在尝试与读者一起管理。
在内存中管理堆栈似乎更复杂。

答案 8 :(得分:1)

{p <3}}中的{C}和C ++都支持JSON和JSONPath,并使用新的gsoap来快速入门。

包含多个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客户端和服务器库。

这是很有希望的,并且正在积极开发中。

有很好的示例来演示如何创建服务器和客户端。

优势:

  • 代码非常干净(严格遵循Google C ++风格)。
  • 根据VLD测试,没有内存泄漏。
  • 易于使用的API。

缺点:

  • 尚无SSL支持。
  • 由于它管理自己的HTTP服务器,因此无法部署到现有网络服务器(如Nginx)。