Chciałbym udostępnić interfejs REST API w mojej aplikacji, używając serwera WWW Mongoose i udostępniając moduły obsługi dla różnych zapytań.Analizowanie składni zapytania REST w C++
Przykładem zapytania byłoby tak (jestem tylko za pomocą GET do momentu, reszta czasowników HTTP przyjdzie później):
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"
Co jestem ciekaw jest jak należy wdrożyć parsowanie tych zapytań. Mogę łatwo przetworzyć pierwszy, ponieważ jest to po prostu kwestia if(query.getURI() == "/items") return ...
.
Ale przy następnych dwóch zapytaniach muszę manipulować ciągami std::
w zupełnie inny sposób, używając magii i przesunięć std::string::find()
, aby uzyskać argument.
Jako przykład, jest to implementacja mam na drugie zapytanie:
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
}
Co jeśli chcę „templatize” to; znaczenie: opisuję ścieżkę i argumenty, których spodziewam się później (liczba całkowita, ciąg znaków, ...); i kod jest generowany automatycznie, aby obsłużyć to?
Tl; dr: Chcę być w stanie obsługiwać zapytania do odpoczynku w C++ z czegoś wzdłuż tych linii:
registerHandler("/item/by/handle/[INTEGER]", myHandlerMethod(int));
to jest możliwe?
Wygląda na to, że potrzebujesz wyrażeń regularnych, jak w boost lub C++ 11. –