in scripts/lua/lib/redis.lua [280:312]
function _M.addAPI(red, id, apiObj, existingAPI)
if existingAPI == nil then
local apis = _M.getAllAPIs(red)
for apiId, obj in pairs(apis) do
if apiId%2 == 0 then
obj = cjson.decode(obj)
if obj.tenantId == apiObj.tenantId and obj.basePath == apiObj.basePath then
request.err(500, "basePath not unique for given tenant.")
end
end
end
else
local snapshotId = _M.getSnapshotId(red, apiObj.tenantId)
local basePath = existingAPI.basePath:sub(2)
for path in pairs(existingAPI.resources) do
local gatewayPath = ngx.unescape_uri(utils.concatStrings({basePath, ngx.escape_uri(path)}))
gatewayPath = gatewayPath:sub(1,1) == "/" and gatewayPath:sub(2) or gatewayPath
local redisKey = utils.concatStrings({"resources:", existingAPI.tenantId, ":", gatewayPath})
_M.deleteResource(red, redisKey, REDIS_FIELD, snapshotId)
local indexKey = utils.concatStrings({"resources:", existingAPI.tenantId, ":__index__"})
_M.deleteResourceFromIndex(red, indexKey, redisKey, snapshotId)
end
end
apiObj = cjson.encode(apiObj):gsub("\\", "")
local ok, err = hset(red, "apis", id, apiObj)
if not ok then
request.err(500, utils.concatStrings({"Failed to save the API: ", err}))
end
return cjson.decode(apiObj)
end