0Pricing
Lua Academy · レッスン

LuaでのHTTPリクエスト処理

ngx APIでリクエストヘッダー、本文、引数にアクセスし、レスポンスを作成します。

「LuaでのHTTPリクエスト処理」はCoddyKit上の無料Lua Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはLua Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Lua Academyコースには全4レッスンが含まれています。

リクエストメソッドとURIの読み取り

HTTPメソッドとURIには、ngx名前空間からアクセスします。

-- content_by_lua_block
local method = ngx.req.get_method()
local uri    = ngx.var.uri
ngx.say("Method: " .. method .. ", URI: " .. uri)

リクエストヘッダーの読み取り

ngx.req.get_headers()は、リクエストヘッダーのテーブルを返します。

local headers = ngx.req.get_headers()
local auth = headers["Authorization"]
if not auth then
  ngx.status = 401
  ngx.say("Unauthorized")
  ngx.exit(ngx.HTTP_UNAUTHORIZED)
end

クエリパラメーターの読み取り

ngx.req.get_uri_args()は、URLのクエリパラメーターのテーブルを返します。

local args = ngx.req.get_uri_args()
local page = tonumber(args.page) or 1
local size = tonumber(args.size) or 20
ngx.say("Page: " .. page .. ", Size: " .. size)

リクエストボディの読み取り

ngx.req.read_body()を明示的に呼び出した後で、リクエストボディを読み取ります。

ngx.req.read_body()
local body = ngx.req.get_body_data()
if not body then
  ngx.status = 400
  ngx.say("Empty body")
  return
end

JSONボディの解析

JSONライブラリ(例: cjson)を使用して、リクエストボディを解析します。

local cjson = require("cjson")
ngx.req.read_body()
local body = ngx.req.get_body_data()
local ok, data = pcall(cjson.decode, body)
if not ok then
  ngx.status = 400
  ngx.say("Invalid JSON")
  return ngx.exit(400)
end

レスポンスヘッダーの設定

ngx.sayまたはngx.printを呼び出す前に、ngx.headerでレスポンスヘッダーを設定します。

ngx.header["Content-Type"] = "application/json"
ngx.header["X-Request-ID"] = ngx.var.request_id

レスポンスの書き込み

ngx.say(s)は文字列と改行を書き込みます。ngx.print(s)は改行なしで書き込みます。ngx.exit(code)は、指定されたHTTPステータスでリクエストを終了します。

ngx.status

レスポンスボディを書き込む前に、ngx.status = 404でHTTPステータスコードを設定します。

ngx.status = 404
ngx.header["Content-Type"] = "application/json"
ngx.say(cjson.encode({error = "Not Found"}))

内部リダイレクト

ngx.exec("/other/path")は、追加のHTTPラウンドトリップなしで、別のNginxロケーションブロックへ内部リダイレクトします。

サブリクエスト

ngx.location.capture("/api")は別のロケーションへのサブリクエストを実行し、ステータス、ヘッダー、ボディを含むテーブルを返します。

local res = ngx.location.capture("/internal/auth")
if res.status ~= 200 then
  ngx.exit(403)
end

リクエストコンテキストの共有

ngx.ctxは、異なるフェーズハンドラー(access → content → log)の間でデータを共有するための、リクエストごとのテーブルです。

HTTP処理に関する質問

OpenRestyでURLのクエリパラメーターを読み取る関数はどれですか。

振り返り: HTTPリクエストの処理

ngx.reqの関数を使用して、メソッド、ヘッダー、クエリ引数、ボディを読み取ります。書き込みを行う前に、ngx.headerとngx.statusを設定します。出力にはngx.sayまたはngx.printを使用します。リクエストごとのデータはngx.ctxで共有します。

よくある質問

「LuaでのHTTPリクエスト処理」レッスンは無料ですか?

はい。「LuaでのHTTPリクエスト処理」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Lua Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Lua Academyコースには全4レッスンが含まれています。

「LuaでのHTTPリクエスト処理」で何を学びますか?

ngx APIでリクエストヘッダー、本文、引数にアクセスし、レスポンスを作成します。 ブラウザで直接実行するハンズオンコードでLua Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Lua Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのLua Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。

「LuaでのHTTPリクエスト処理」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このLua Academyレッスンでコードを書いて実行できますか?

はい。すべてのLua Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. OpenRestyアーキテクチャ
  2. LuaでのHTTPリクエスト処理
  3. CosocketとノンブロッキングTCP
  4. 共有メモリ辞書
← Lua Academyに戻る