Me gustaría exponer una API REST en mi aplicación, utilizando el servidor web Mongoose y proporcionando controladores para diferentes consultas.Parse REST consulta en C++
Un ejemplo de consulta sería así (sólo estoy usando GET, por el momento, el resto de los verbos HTTP vendrá después):
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"
Lo que estoy curioso es cómo debería poner en práctica el análisis de estas consultas. Puedo analizar fácilmente el primero, ya que es simplemente una cuestión de if(query.getURI() == "/items") return ...
.
Pero para las próximas dos consultas, tengo que manipular las cadenas std::
de una manera completamente diferente, usando magia y desfases std::string::find()
para llegar al argumento.
A modo de ejemplo, esta es la aplicación que tengo para la segunda consulta:
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
}
¿Qué pasa si quiero "crear plantillas" esto; significado: describo la ruta y los argumentos que espero después (un entero, una cadena, ....); y el código se genera automáticamente para manejar esto?
Tl; Dr: Quiero ser capaz de manejar las consultas de descanso en C++ con algo en este sentido:
registerHandler("/item/by/handle/[INTEGER]", myHandlerMethod(int));
es esto posible?
Parece que necesita expresiones regulares, como se encuentra en boost o C++ 11. –