Fast🚀, efficient⌛️, and easiest💥 c++ async micro web framework based on ✨C++ Workflow✨.
C++ Workflow is a light-weighted C++ Parallel Computing and Asynchronous Networking Engine.
If you need performance and good productivity, you will love ✨wfrest✨.
- ✨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)
- Redirect
- Built-in Json Api
For more information, you can first see discussions:
https://github.com/wfrest/wfrest/discussions
- 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
git clone --recursive https://github.com/wfrest/wfrest
cd wfrest
make
sudo make install
For test :
make check
For example :
make example
If you want to use xmake to build wfrest, you can see xmake build document
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
#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; }