Я хотел бы предоставить REST API для моего приложения, используя веб-сервер Mongoose и предоставляя обработчики для различных запросов.
Пример запроса может быть таким (на данный момент я использую только GET, остальные HTTP-глаголы появятся позже):
GET /items -> returns a list of all items in JSON
GET /item/by/handle/123456789 -> returns item that has handle 123456789
GET /item/by/name/My%20Item -> returns item(s) that have the name "My Item"
Что мне любопытно, так это то, как я должен реализовать разбор этих запросов. Я легко могу разобрать первое, так как это просто вопрос if( query.getURI() == "/items") return ...
.
Но для следующих двух запросов я должен манипулировать строками std::
совершенно другим способом, используя магию std::string::find()
и смещения для получения аргумента.
В качестве примера, у меня есть реализация для второго запроса:
size_t position = std::string::npos;
std::string path = "/item/by/handle/";
if( (position = query.getURI().find(path) ) != std::string::npos )
{
std::string argument = query.getURI().substr( position + path.size() );
// now parse the argument to an integer, find the item and return it
}
Что, если я захочу "шаблонизировать" это; значение: я опишу путь и аргументы, которые я ожидаю потом (целое число, строка, ....); и код автоматически генерируется для обработки этого?
Tl; Dr: Я хочу иметь возможность обрабатывать REST-запросы в C ++ с чем-то вроде этого:
registerHandler( "/item/by/handle/[INTEGER]", myHandlerMethod( int ));
Возможно ли это?