mirror of
https://github.com/CrowCpp/Crow.git
synced 2024-06-07 21:10:44 +00:00
103 lines
3.0 KiB
Markdown
103 lines
3.0 KiB
Markdown
#
|
|
<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">
|
|
<a href="https://cloud.drone.io/CrowCpp/crow"><img src="https://cloud.drone.io/api/badges/CrowCpp/crow/status.svg" alt="Build Status"></a>
|
|
<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>
|
|
<a href="https://crowcpp.github.io/crow"><img src="https://img.shields.io/badge/-Documentation-informational" alt="Documentation"></a>
|
|
<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
|
|
- [HTTP/2 support](https://github.com/crowcpp/crow/issues/8)
|
|
|
|
## Documentation
|
|
Available [here](https://crowcpp.github.io/crow).
|
|
|
|
## Examples
|
|
|
|
#### Hello World
|
|
```cpp
|
|
#define CROW_MAIN
|
|
#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()};
|
|
});
|
|
```
|
|
|
|
More examples can be found [here](https://github.com/crowcpp/crow/tree/master/examples).
|
|
|
|
## Setting Up / Building
|
|
Available [here](https://crowcpp.github.io/crow/getting_started/setup).
|