Я хотел бы предоставить API REST для моего приложения, используя веб-сервер Mongoose и предоставляя обработчики для разных запросов.Parse REST-запрос в C++
Пример запроса будет, как это (я только с помощью 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
}
Что делать, если я хочу «templatize» это; Значение: Я описываю путь и аргументы, которые я ожидаю впоследствии (целое число, строка, ....); и код автоматически генерируется для обработки этого?
Tl, доктор: Я хочу, чтобы иметь возможность обрабатывать запросы REST в C++ с чем-то вдоль этих линий:
registerHandler("/item/by/handle/[INTEGER]", myHandlerMethod(int));
Возможно ли это?
Похоже, вам нужны регулярные выражения, найденные в boost или C++ 11. –