Pistache is a modern and elegant HTTP and REST framework for C++. It is entirely written in pure-C++11 and provides a clear and pleasant API.
We are still looking for a volunteer to document fully the API. In the mean time, partial documentation is available at http://pistache.io. If you are interested in helping with this, please open an issue ticket.
Pistache is released under the Apache License 2.0. Contributors are welcome!
Pistache was originally created by Mathieu Stefani, but he is no longer actively maintaining Pistache. A team of volunteers has taken over. To reach the original maintainer, drop a private message to @octal
in cpplang Slack channel.
For those that prefer IRC over Slack, the rag-tag crew of maintainers idle in #pistache
on Freenode. Please come and join us!
If you would like to use stable packages, run the following:
$ sudo add-apt-repository ppa:kip/pistache
$ sudo apt update
$ sudo apt install libpistache-dev
To use unstable packages, run the following:
$ sudo add-apt-repository ppa:kip/pistache-unstable
$ sudo apt update
$ sudo apt install libpistache-dev
If you would like to automatically have your project's build environment use the appropriate compiler and linker build flags necessary to use Pistache, pkg-config can greatly simplify things. The libpistache-dev
package includes a pkg-config manifest.
To use with the GNU Autotools, as an example, include the following snippet in your project's configure.ac
:
# Pistache...
PKG_CHECK_MODULES(
[libpistache], [libpistache >= 0.0], [],
[AC_MSG_ERROR([libpistache >= 0.0 missing...])])
YOURPROJECT_CXXFLAGS="$YOURPROJECT_CXXFLAGS $libpistache_CFLAGS"
YOURPROJECT_LIBS="$YOURPROJECT_LIBS $libpistache_LIBS"
To download the latest available release, clone the repository over github.
git clone https://github.com/oktal/pistache.git
Then, init the submodules:
git submodule update --init
Now, compile the sources:
cd pistache
mkdir -p {build,prefix}
cd build
cmake -G "Unix Makefiles" \
-DCMAKE_BUILD_TYPE=Release \
-DPISTACHE_BUILD_EXAMPLES=true \
-DPISTACHE_BUILD_TESTS=true \
-DPISTACHE_BUILD_DOCS=false \
-DPISTACHE_USE_SSL=true \
-DCMAKE_INSTALL_PREFIX=$PWD/../prefix \
../
make -j
make install
If you chose to build the examples, then perform the following to build the examples.
cd examples
make -j
Optionally, you can also build and run the tests (tests require the examples):
cmake -G "Unix Makefiles" -DPISTACHE_BUILD_EXAMPLES=true -DPISTACHE_BUILD_TESTS=true ..
make test test_memcheck
Be patient, async_test can take some time before completing. And that's it, now you can start playing with your newly installed Pistache framework.
Some other CMAKE defines:
Option | Default | Description |
---|---|---|
PISTACHE_BUILD_EXAMPLES | False | Build all of the example apps |
PISTACHE_BUILD_TESTS | False | Build all of the unit tests |
PISTACHE_ENABLE_NETWORK_TESTS | True | Run unit tests requiring remote network access |
PISTACHE_USE_SSL | False | Build server with SSL support |
#include <pistache/endpoint.h>
using namespace Pistache;
struct HelloHandler : public Http::Handler {
HTTP_PROTOTYPE(HelloHandler)
void onRequest(const Http::Request&, Http::ResponseWriter writer) override{
writer.send(Http::Code::Ok, "Hello, World!");
}
};
int main() {
Http::listenAndServe<HelloHandler>("*:9080");
}