A Boost Based C++ HTTP JSON Server.
NOTE:
- To build the dependencies & the project, refer to
BUILD-Windows.md
orBUILD-ubuntu.md
.bserv
contains the source code forbserv
.
In Windows, you can simply open
examples/Examples.sln
. In Ubuntu,examples/CMakeLists.txt
can be used to compile all the examples.
#include <bserv/common.hpp>
#include <boost/json.hpp>
boost::json::object hello()
{
return {{"msg", "hello, world!"}};
}
int main()
{
bserv::server_config config;
// config.set_port(8080);
bserv::server{config, {
bserv::make_path("/hello", &hello)
}};
}
By default, bserv
listens to 8080
. When you make a request (of any type) to localhost:8080/hello
, it will respond: {"msg": "hello, world!"}
.
#include <bserv/common.hpp>
#include <boost/json.hpp>
#include <string>
boost::json::object greet(
const std::string& name)
{
return {{"hello", name}};
}
boost::json::object greet2(
const std::string& name1,
const std::string& name2)
{
return {
{"name1", name1},
{"name2", name2}
};
}
boost::json::object echo(
boost::json::object&& params)
{
return params;
}
int main()
{
bserv::server_config config;
bserv::server{config, {
bserv::make_path(
"/greet/<str>", &greet,
bserv::placeholders::_1),
bserv::make_path(
"/greet/<str>/and/<str>", &greet2,
bserv::placeholders::_1,
bserv::placeholders::_2),
bserv::make_path(
"/echo", &echo,
bserv::placeholders::json_params)
}};
}
The following table shows some requests & responses:
Method | URL | Request Body | Response Body |
---|---|---|---|
Any | /greet/world |
(Empty) | {"hello": "world"} |
Any | /greet/world1/and/world2 |
(Empty) | {"name1": "world1", "name2": "world2"} |
GET | /echo?hello=world |
(Empty) | {"hello": "world"} |
POST | /echo |
{"hello": "world"} |
{"hello": "world"} |
All of the URLs should be prefixed with localhost:8080
when you make the requests.
WebApp
is a sample project.config-Windows.json
andconfig-ubuntu.json
are two sample config file forWebApp
's startup parameters. It should be configured and renamed toconfig.json
before you startWebApp
.- To use
WebApp
, you should setup the database as well.
You can import the sample database:
-
Create the database in
psql
:create database bserv;
-
Create the table in the
shell
using a sample script:psql bserv < db.sql