β¨ wfrest: C++ Web Framework REST API
Fast
C++ Workflow is a light-weighted C++ Parallel Computing and Asynchronous Networking Engine.
If you need performance and good productivity, you will love
Contents
β¨ wfrest: C++ Web Framework REST API- Discussion
- Contents
- Build
- Quick start
- API Examples
- Parameters in path
- Query string parameters
- Post Form
- Header
- Send File
- Save File
- Upload Files
- Json
- Computing Handler
- Series Handler
- Compression
- BluePrint
- Serving static files
- Cookie
- Custom Server Configuration
- Aspect-oriented programming
- Https Server
- Proxy
- MySQL
- Redis
- Timer
- Server Push(Server sent event)
- Built-in Json Api
Dicssussion
For more information, you can first see discussions:
https://github.com/wfrest/wfrest/discussions
Build
Requirement
- workflow, version v0.9.9 or newer
- Linux , like ubuntu 16.04 or newer
- Cmake or Xmake
- zlib1g-dev
- libssl-dev
- libgtest-dev
- gcc and g++ or llvm + clang, tested with ubuntu 20.04
Tips : Because in g++ 4.9 and the previous version, lambda can't capture variadic templates, we require you to upgrade your g++ version to 5.0 and above.
If you are on ubuntu 20.04, you may install them by command:
apt-get install build-essential cmake zlib1g-dev libssl-dev libgtest-dev -y
For more details, you can see here : requirement details
Cmake
git clone --recursive https://github.com/wfrest/wfrest
cd wfrest
make
sudo make install
For test :
make check
For example :
make example
Xmake
If you want to use xmake to build wfrest, you can see xmake build document
Docker
Use dockerfile, the Dockerfile locate /docker
subdirectory of root source code repository.
docker build -t wfrest ./docker/ubuntu/
If you are using podman
, you can also build it. and tested under ubuntu 20.04
podman build -t wfrest ./docker/ubuntu/
Or you can Pull from DockerHub
docker pull wfrest/wfrest
Quick start
#include "wfrest/HttpServer.h"
using namespace wfrest;
int main()
{
HttpServer svr;
// curl -v http://ip:port/hello
svr.GET("/hello", [](const HttpReq *req, HttpResp *resp)
{
resp->String("world\n");
});
// curl -v http://ip:port/data
svr.GET("/data", [](const HttpReq *req, HttpResp *resp)
{
std::string str = "Hello world";
resp->String(std::move(str));
});
// curl -v http://ip:port/post -d 'post hello world'
svr.POST("/post", [](const HttpReq *req, HttpResp *resp)
{
// reference, no copy here
std::string& body = req->body();
fprintf(stderr, "post data : %s\n", body.c_str());
});
if (svr.start(8888) == 0)
{
getchar();
svr.stop();
} else
{
fprintf(stderr, "Cannot start server");
exit(1);
}
return 0;
}