我有一个要求,我必须更改并存储传入请求的动态网址路径并存储在我们的后端
以下是示例网址
GET /v1/merchants
使用我的Lua代码,我将其更改为
GET_/v1/merchants
一切都很好,正是我所需要的。但是当我在url
中使用动态路径尝试时会出现问题例如:GET /v1/content/merchants/{string}
网址可以是GET /v1/content/merchants/foo
或GET /v1/content/merchants/bar
我想将上述格式存储在后端,例如GET /v1/content/merchants/string
,因为我无法在后端GET_/v1/content/merchants/foo
或GET_/v1/content/merchants/bar
存储每个传入的请求
以下是代码
local function get_method(request)
local method, path, query_fragment = request:match("^(.+) ([^%?]+)(%??.*) .+$")
if method and path then
return method .. "_" .. path
else
return nil
end
end
local function extract_usage(request)
local usage_t = {}
local ts_method = get_method(request)
if ts_method then
usage_t[ts_method] = set_or_inc(usage_t, ts_method, 1)
return build_querystring(usage_t)
else
return nil
end
end
答案 0 :(得分:0)
我建议使用
local function get_method_updated(request)
local method, path, query_fragment = request:match("^(.+) ([^%?]+)(%??.*) .+$")
if method and path then
if path:match('^/[^/]+/[^/]+/[%w_]+') ~= nil then
return method .. " " .. path
else
return method .. "_" .. path
end
else
return nil
end
end
print(get_method_updated("GET /v1/merchants something"))
print(get_method_updated("GET /v1/content/merchants/foo or"))
print(get_method_updated("GET /v1/content/merchants/bar some"))
请参阅Lua demo。
输出:
GET_/v1/merchants
GET /v1/content/merchants/foo
GET /v1/content/merchants/bar
get_method_updated
将确保您不会将强调的请求部分作为返回值。