Mongoose Web サーバーを使用し、さまざまなクエリのハンドラーを提供して、アプリケーションで REST API を公開したいと考えています。
クエリの例は次のようになります (現時点では 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 ...
。
しかし、次の 2 つのクエリでは、std::
文字列をまったく異なる方法で操作std::string::find()
する必要があります。引数に到達するために、魔法とオフセットを使用します。
例として、これは 2 番目のクエリの実装です。
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: 次の行に沿って、C++ で REST クエリを処理できるようにしたいと考えています。
registerHandler( "/item/by/handle/[INTEGER]", myHandlerMethod( int ));
これは可能ですか?