如何实现REST API服务器?

时间:2015-08-14 19:32:29

标签: c++ api rest

我是一名具有中级C ++编程经验的大学生。 我想尽快为我的应用程序实现一个简单的基于REST的API。

我查看了CasablancalibWebSockets,但在各自网站上发布的示例有点过头了。是否有任何库有更多关于在C ++中创建RESTFUL API服务器的面向初学者的教程?

注意:我知道这个问题已在C#中被问过几次,但答案是一年或两年以上,而且大多数都不针对初学者。我希望新帖可以得到一些新的答案!

4 个答案:

答案 0 :(得分:6)

Restbed通过ASIO和C ++ 11提供异步客户端/服务器功能。我们有很多examples,很快就会有那些不喜欢读头文件的人提供文档。

#include <memory>
#include <cstdlib>
#include <restbed>

using namespace std;
using namespace restbed;

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

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

    session->fetch( content_length, [ ]( const shared_ptr< Session > session, const Bytes & body )
    {
        fprintf( stdout, "%.*s\n", ( int ) body.size( ), body.data( ) );
        session->close( OK, "Hello, World!", { { "Content-Length", "13" } } );
    } );
}

int main( const int, const char** )
{
    auto resource = make_shared< Resource >( );
    resource->set_path( "/resource" );
    resource->set_method_handler( "POST", post_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;
}

下一个主要功能将允许依赖注入应用程序层。

auto settings = make_shared< Settings >( );

Service service;
service.add_application_layer( http_10_instance );
service.add_application_layer( http_11_instance );
service.add_application_layer( http2_instance );
service.add_application_layer( spdy_instance );
service.start( settings );

答案 1 :(得分:4)

ngrest是一个简单的REST框架,包含epoll,代码生成,命令行工具,扩展和其他糖。

它易于使用,适合初学者;写在C ++ 11上并使用CMake进行构建。

答案 2 :(得分:3)

http://pistache.io/对我来说看起来很好,很现代。你好世界只有9行。

答案 3 :(得分:2)

嘿,我不久前也是整个API游戏的新手。我发现在Visual Studio中部署 ASP.NET Web API 是一个很好的开始。 VS提供的模板(我使用2013年)使您可以轻松创建自己的控制器。

如果您查看有关HTTP方法的几个教程,您可以真正掌握模拟控制器的需求。它们很好地映射到了我确定您要执行的CRUD操作。

您还应该能够在C ++中找到一个库,它允许您调用每个控制器方法并传递/接收序列化的JSON / XML对象。希望这有帮助,祝你好运! :)