如何使用c ++语言和JSON Parser创建Restful Web服务

时间:2014-07-31 11:31:00

标签: c++ json linux web-services rest

我正在使用嵌入式Linux,我希望Restful Web服务能够在我的Linux自定义板上运行。

我的目标是向/从Web服务器(httpd服务器)发送/接收数据(采用JSON格式)。

另外,我想使用C ++语言创建Restful Web服务。

请参阅以下有关我的Linux自定义板需要Restful Web Services的想法。

  1. 首先,我将通过在我的linux主板上运行的httpd服务器发送带有JSON格式数据的HTTP请求。

  2. 然后,我想创建一个二进制文件或服务器,用c ++语言实现这个Restful Web Services,用于处理HTTP请求。

  3. 然后,此C ++二进制文件将响应发送回httpd服务器,以便通过Web浏览器显示。

  4. 有没有人有关于如何使用C ++语言创建Restful Web Services的想法或示例?

    欢迎任何有关Restful的帮助。

    是否有人了解 ffead 及其功能是否符合我的Restful Web Services?

8 个答案:

答案 0 :(得分:19)

除了JSON解析器之外,

Restbed可以满足您的要求。但是,将解决方案与已有的许多C ++ JSON实现之一相结合,只需要很少的工作。

#include <memory>
#include <string>
#include <cstdlib>
#include <sstream>
#include <jsonbox.h>
#include <restbed>

using namespace std;
using namespace restbed;

void get_method_handler( const shared_ptr< Session > session )
{
    const auto request = session->get_request( );

    size_t content_length = request->get_header( "Content-Length", 0 );

    session->fetch( content_length, [ ]( const shared_ptr< Session >& session, const Bytes& body )
    {
        JsonBox::Value json;
        json.loadFromString( string( body.begin( ), body.end( ) ) );

        //perform awesome solutions logic...

        stringstream stream;
        json.writeToStream( stream );
        string response_body = stream.str( );

        session->close( OK, response_body, { { "Content-Length", ::to_string( response_body.length( ) }, { "Content-Type": "application/json" } } );
    } );
}

int main( const int, const char** )
{
    auto resource = make_shared< Resource >( );
    resource->set_path( "/resource" );
    resource->set_method_handler( "GET", get_method_handler );

    auto settings = make_shared< Settings >( );
    settings->set_port( 1984 );
    settings->set_default_header( "Connection", "close" );

    Service service;
    service.publish( resource );
    service.start( settings );

    return EXIT_SUCCESS;
}

替代RESTful框架

替代JSON框架

答案 1 :(得分:3)

我将oatppnlohmann JSON结合使用。尽管您可以纯粹使用oatpp,因为它具有内置的JSON处理功能。请参阅step by step guide

答案 2 :(得分:2)

对于JSON格式的发送/接收数据,请尝试jsoncpp

答案 3 :(得分:2)

使用嵌入式Web服务器,例如Mongoose,CivetWeb或NXWeb。 (有关详细信息,请参阅this post

通常这些都很容易嵌入到您的应用程序中,然后您只需要一个JSON库来解析/创建Web服务器路由处理程序中的JSON数据。毕竟,REST只是HTTP请求,因此使用上述方法之一很容易实现。

答案 4 :(得分:2)

我知道这已经很晚了,但一两年前出现了一些新的东西。

如果您要进行高性能的硬核异步编程,可以考虑使用boost::beast。它是boost::asio(通用tcp / udp和i / o库)之上的一层,它同时包含http(s)和websocket服务器/客户端。

请记住,这些是多线程性能和完全自由的理想选择(如果您有可以接受它的服务器,您可以在数千个线程上运行服务器,几乎完美的缓存),但是他们有一个陡峭的学习 - 曲线。只有在你需要绝对控制一切时才这样做!

答案 5 :(得分:1)

有些像CppCMS这样的框架嵌入了自己的HTTP服务器,所以你可能不需要像Apache httpd那样重的东西。

我假设您的REST服务不会负载过重。

此外,CppCMS支持开箱即用的JSON,请参阅http://cppcms.com/wikipp/en/page/cppcms_1x_json

答案 6 :(得分:0)

可能最好的办法是使用FastCGI创建一个与您的Web服务器连接的模块。这可以防止您必须实现自己的HTTP服务器。

答案 7 :(得分:0)

能够使用SHTML的最小Web服务将包括Open SSL。

这是一个简单的C ++ SHTML服务器的示例,该服务器使用TCP / IP调用,除了OpenSSL以外没有其他框架

这是Restful框架的相当全面的列表,其中包括300种语言。

在撰写此答案时,搜索的是“ C ++”的更全面列表 超过60个条目。