Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to Create Restful Web Services using c++ language and JSON Parser

I am working on Embedded Linux and I want Restful web services to run on my Linux Custom Board.

My objective is to send/receive data (in JSON format) to/from web server (httpd server).

Also, I want to create that Restful Web services using C++ language.

Please see below idea about need of Restful Web Services for my Linux Custom Board.

  1. First, I will send HTTP request with JSON format data through httpd server which is running on my linux board.

  2. Then, I want to create one binary or server which implements this Restful Web Services in c++ language which is used to handle HTTP request.

  3. Then, This C++ binary will send response back to httpd server for display purpose over web browser.

Does anyone have idea or example about how to create Restful Web Services using C++ language?

Any help on Restful is welcome.

Does any one has idea about ffead and its functionalities which fulfills my Restful Web Services or not?

like image 562
Ritesh Prajapati Avatar asked Jul 31 '14 11:07

Ritesh Prajapati


People also ask

What is JSON RESTful web service?

RESTful web services REpresentational State Transfer, or REST, is a design pattern for interacting with resources stored in a server. Each resource has an identity, a data type, and supports a set of actions. The RESTful design pattern is normally used in combination with HTTP, the language of the internet.


2 Answers

Restbed can address your requirements with the exception of a JSON parser. However, combining a solution with one of the many C++ JSON implementations already available requires very little work.

#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; } 

Alternative RESTful frameworks

  • Casablanca C++ REST SDK (edit: project moved & renamed)
  • CPP-Netlib
  • RESTful Mapper
  • Simple REST (edit: no longer exist)
  • Google is your friend.

Alternative JSON frameworks

  • LibJSON
  • RapidJSON
  • JSONMe
  • JSON++
  • JSON-CPP
  • Google is your friend.
like image 166
Ben Crowhurst Avatar answered Oct 05 '22 23:10

Ben Crowhurst


I know this is late, but something new has come up a year or two ago.

If you're into hardcore asynchronous programming for high-performance, you can consider boost::beast. It's a layer above boost::asio (the generic tcp/udp and i/o library) that has both http(s) and websocket servers/clients.

Keep in mind that these are ideal for performance and full freedom in multithreading (you can literally run your server on thousands of threads with almost perfect caching if you have a server that can take it), but they have a steep learning-curve. Do this only if you need to have absolute control over everything!

like image 26
The Quantum Physicist Avatar answered Oct 06 '22 00:10

The Quantum Physicist