2020-11-28 14:28:47 +00:00
#
< p align = "center" > < img src = "assets/crowlogo.svg" width = 600 > < / p >
< h4 align = "center" > A Fast and Easy to use microframework for the web.< / h4 >
< p align = "center" >
2021-04-01 05:50:10 +00:00
< a href = "https://cloud.drone.io/CrowCpp/crow" > < img src = "https://cloud.drone.io/api/badges/CrowCpp/crow/status.svg" alt = "Build Status" > < / a >
2020-11-30 23:03:49 +00:00
< a href = "https://coveralls.io/github/CrowCpp/crow?branch=master" > < img src = "https://coveralls.io/repos/github/CrowCpp/crow/badge.svg?branch=master" alt = "Coverage Status" > < / a >
2020-11-30 20:05:55 +00:00
< a href = "https://crowcpp.github.io/crow" > < img src = "https://img.shields.io/badge/-Documentation-informational" alt = "Documentation" > < / a >
2020-11-28 14:28:47 +00:00
< a href = "https://gitter.im/crowfork/community?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge" > < img src = "https://badges.gitter.im/crowfork/community.svg" alt = "Gitter" > < / a >
< / p >
## Description
Crow is a C++ microframework for running web services. It uses routing similar to Python's Flask which makes it easy to use. It is also extremely fast, beating multiple existing C++ frameworks as well as non C++ frameworks.
### Features
- Easy Routing (similar to flask).
- Type-safe Handlers.
- Blazingly fast (see [this benchmark ](https://github.com/ipkn/crow-benchmark ) and [this benchmark ](https://github.com/guteksan/REST-CPP-benchmark )).
- Built in JSON support.
- [Mustache ](http://mustache.github.io/ ) based templating library (`crow::mustache`).
- Header only library (single header file available).
- Middleware support for extensions.
- HTTP/1.1 and Websocket support.
- Multi-part request and response support.
- Uses modern C++ (11/14)
### Still in development
2020-11-30 20:05:55 +00:00
- [HTTP/2 support ](https://github.com/crowcpp/crow/issues/8 )
2020-11-28 14:28:47 +00:00
## Documentation
2020-11-30 20:05:55 +00:00
Available [here ](https://crowcpp.github.io/crow ).
2020-11-28 14:28:47 +00:00
## Examples
#### Hello World
2021-06-28 15:56:27 +00:00
```cpp
#define CROW_MAIN
2020-11-28 14:28:47 +00:00
#include "crow.h"
int main()
{
crow::SimpleApp app;
CROW_ROUTE(app, "/")([](){
return "Hello world";
});
app.port(18080).multithreaded().run();
}
```
#### JSON Response
```cpp
CROW_ROUTE(app, "/json")
([]{
crow::json::wvalue x;
x["message"] = "Hello, World!";
return x;
});
```
#### Arguments
```cpp
CROW_ROUTE(app,"/hello/< int > ")
([](int count){
if (count > 100)
return crow::response(400);
std::ostringstream os;
os < < count < < " bottles of beer ! " ;
return crow::response(os.str());
});
```
Handler arguments type check at compile time
```cpp
// Compile error with message "Handler type is mismatched with URL paramters"
CROW_ROUTE(app,"/another/< int > ")
([](int a, int b){
return crow::response(500);
});
```
#### Handling JSON Requests
```cpp
CROW_ROUTE(app, "/add_json")
.methods("POST"_method)
([](const crow::request& req){
auto x = crow::json::load(req.body);
if (!x)
return crow::response(400);
int sum = x["a"].i()+x["b"].i();
std::ostringstream os;
os < < sum ;
return crow::response{os.str()};
});
```
2020-11-30 20:05:55 +00:00
More examples can be found [here ](https://github.com/crowcpp/crow/tree/master/examples ).
2020-11-28 14:28:47 +00:00
## Setting Up / Building
2020-11-30 20:05:55 +00:00
Available [here ](https://crowcpp.github.io/crow/getting_started/setup ).