我正在使用嵌入式Linux,我希望Restful Web服务能够在我的Linux自定义板上运行。
我的目标是向/从Web服务器(httpd服务器)发送/接收数据(采用JSON格式)。
另外,我想使用C ++语言创建Restful Web服务。
请参阅以下有关我的Linux自定义板需要Restful Web Services的想法。
首先,我将通过在我的linux主板上运行的httpd服务器发送带有JSON格式数据的HTTP请求。
然后,我想创建一个二进制文件或服务器,用c ++语言实现这个Restful Web Services,用于处理HTTP请求。
然后,此C ++二进制文件将响应发送回httpd服务器,以便通过Web浏览器显示。
有没有人有关于如何使用C ++语言创建Restful Web Services的想法或示例?
欢迎任何有关Restful的帮助。
是否有人了解 ffead 及其功能是否符合我的Restful Web Services?
答案 0 :(得分:19)
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)
我将oatpp与nlohmann 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个条目。