gpt4 book ai didi

c++ - 在 C++ 中解析 REST 查询

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:31:25 24 4
gpt4 key购买 nike

我想在我的应用程序上公开一个 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:我希望能够在 C++ 中使用以下内容处理 REST 查询:

registerHandler( "/item/by/handle/[INTEGER]", myHandlerMethod( int ));

这可能吗?

最佳答案

一种相当不性感但简单的方法是简单地使用 sscanf。请原谅相当类似于 C 的代码。请注意,这不提供您正在寻找的那种语法,但它不需要任何库、扩展或提升。

例如,

int param;
int a, b;
char c[255];

/* recall that sscanf returns the number of variables filled */
if( 1 == sscanf( query.getURI(), "/item/by/handle/%d", &param ) ) {

handler( param );

} else if ( 3 == sscanf( query.getURI(), "/more/params/%d/%d/%s", &a, &b, &c ) ) {

anotherHandler( a, b, c );

} else {
// 404
}

关于c++ - 在 C++ 中解析 REST 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9148667/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com