Using Functional Programming Patterns to build a clean and simple HTTP routing API
Web services are flourishing, and C++ has some great libraries (such as Boost/Asio + Beast or CppRestSdk) which we can use as the basis to build such services. Yet it is still relatively inconvenient to define HTTP routes in C++. Most approaches available in online tutorials are based on manual manipulation of regex or HTTP concepts. In this talk, we will present the result of our work toward creating a clean HTTP routing library, usable on top of any HTTP transport layer library, which offers a terse and declarative syntax, composable routes, type-safety and a rich set of additional features such as generating sample routes or documentation. We will discuss our initial investigations, and explain why we chose a functional-programming-based approach over reflection-based designs such as are common in the object-oriented world. You will learn about some design choices which allowed us to come closer to the “Don't Repeat Yourself” ideal: maximizing the services offered for the information provided by the client of the API.