スタックに3scaleを実装する方法を実証するために、概念実証を行っています。1 つの例では、POST要求本文の操作を行って、従来の API 形式を新しい内部形式にマップする API ファサードを作成したいと考えています。例えば。のようなものを変更します
{ "foo" : "bar" , "deprecated" : true }
の中へ
{ "FOO" : "bar" }
content_by_luaのLua モジュール ドキュメント。これは、適切なメソッドのようです。
このディレクティブと他のコンテンツ ハンドラー ディレクティブを同じ場所で使用しないでください。たとえば、このディレクティブとproxy_passディレクティブを同じ場所で使用しないでください。
私の理解では、content_by_lua は proxy_pass のようなコンテンツ ハンドラであり、場所ごとに 1 つしか使用できません。
それがプロキシの仕組みの基礎であるため、 proxy_passを削除する方法はないと思います。別の場所でリクエストをキャプチャし、 content_by_luaを使用してから、 proxy_passを実装する場所に渡すか、次のような別の方法がありますどちらがより適切なrewrite_by_lua ?
他の人に役立つ場合は、次の関数 (Lua の最初のビット) を追加しました。これは、user_key
3scale が承認に必要とするパラメーターを削除しますが、転送された場合に API に対して無効になります。
function remove_user_key()
ngx.req.read_body()
-- log the original body so we can compare to the new one later
local oldbody = ngx.req.get_body_data()
log(oldbody)
-- grab the POST parameters as a table
local params = ngx.req.get_post_args()
-- build up the new JSON string
local newbody = "{"
for k,v in pairs(params) do
-- add all the params we want to keep
if k ~= "user_key" then
log("adding"..k.." as "..v)
newbody = newbody..'"'..k..'":"'..v..'",'
else
log("not adding user_key")
end
end
--remove the last trailing comma before closing this off
newbody = string.sub(newbody, 0, #newbody-1)
newbody = newbody.."}"
ngx.req.set_body_data(newbody)
log(newbody)
end
if ngx.req.get_method() == "POST" then
remove_user_key()
end