logo
Published on

3 ขั้นตอนเชื่อมต่อ API ด้วยภาษา Lua

Authors
  • avatar
    Name
    Samiti
    Twitter

สอนเชื่อมต่อภาษา Lua

เกริ่น

การเขียนโปรแกรมเพื่อเชื่อมต่อ API ด้วยภาษา Lua เป็นทักษะที่มีประโยชน์สำหรับนักพัฒนาภาษา Lua ในแง่การพัฒนาเกมส์ และระบบฝังตัวซึ่ง Lua เก่งในด้านนี้เป็นเรื่องปกติ

สำหรับในบทความนี้จะนำผู้อ่านใช้ JSONPlaceholder ซึ่งเป็นการให้บริการ REST API ในรูปแบบออนไลน์ฟรี ไม่เสียค่าใช้จ่าย และเหมาะสำหรับใช้ทดสอบระบบ หรืองานต้นแบบ เป็นต้น

ในบทความนี้จะพาไปดูวิธีการเชื่อมต่อ APi จาก JSONPlaceholder และดึงข้อมูลออกมาแสดงผลด้วยภาษา Lua

อะไรคือ JSONPlaceholder

JSONPlaceholder เป็นเว็บไซต์สำหรับจำลองการใช้งาน REST API สำหรับการทดสอบและทดสอบงานต้นฉบับ โดยมีปลายทางการรับส่งข้อมูล (endpoint) ในหลากหลากรูปแบบข้อมูล เช่น posts, comments, albums, photos เป็นต้น จึงทำให้เหมาะสมกับการเรียนรู้และทดสอบระบบ

สิ่งที่ต้องมี

ก่อนที่เราจะเริ่มลงมือทำ ควรเตรียมพื้นฐานดังนี้

  1. พื้นฐานภาษา Lua
  2. การติดตั้ง Lua Enviroment ในเครื่อง
  3. ไลบลารี่ HTTP requests สำหรับ Lua จะนิยมใช้ LuaSocket หรือ http เป็นต้น

ขั้นตอน

  1. สร้างโปรเจคภาษา Lua

สร้างโฟลเดอร์งานใหม่ ตั้งชื่ออะไรก็ได้ จากนั้นด้านในโฟลเดอร์ในตั้งชื่อไฟล์ว่า main.lua

  1. ติดตั้ง LuaSocket

การเรียก HTTP requests เราจะใช้ LuaSocket หากยังไม่ได้ติดตั้งให้ใช้ Lua package manager ติดตั้งแทนได้เลย โดยใช้คำสั่ง

luarocks install luasocket
  1. การดึงข้อมูลจาก JSONPlaceholder

ภายใน main.lua ให้พิมพ์โปรแกรมคำสั่งด้านล่าง เพื่อดึง API จาก JSONPlaceholder

-- main.lua
local http = require("socket.http")
local json = require("dkjson")
local ltn12 = require("ltn12")

-- Function to fetch data from JSONPlaceholder API
local function fetch_data(url)
    local response_body = {}

    local res, code, response_headers, status = http.request {
        url = url,
        sink = ltn12.sink.table(response_body)
    }

    if code ~= 200 then
        print("Error fetching data: " .. status)
        return nil
    end

    local response_data = table.concat(response_body)
    local data, pos, err = json.decode(response_data, 1, nil)

    if err then
        print("Error decoding JSON: " .. err)
        return nil
    end

    return data
end

-- URL of the JSONPlaceholder API endpoint
local url = "https://jsonplaceholder.typicode.com/posts"

-- Fetch and display the data
local posts = fetch_data(url)

if posts then
    for _, post in ipairs(posts) do
        print("Title: " .. post.title)
        print("Body: " .. post.body)
        print("---")
    end
end

คำอธิบายโค้ด

  1. การนำเข้าไลบรารี่ เรียกไลบรารี่ socket.http สำหรับ http request และ dkjson สำหรับจัดการข้อมูลประเภท JSON
  2. สร้างฟังชั่นสำหรับดึงข้อมูล ตั้งชื่อฟังชั่นชื่อว่า fetch_data เพื่อยิงข้อมูลผ่าน URL และตอบกลับข้อมูล
  3. การเรียกใช้ http.request ในฟังชั่น fetch_data เพื่อรวบรวมข้อมูลการตอบกลับไปยังตัวแปรที่ชื่อ response_body
  4. การจัดการข้อผิดพลาด เพื่อใดก็ตามที่เรียกข้อมูลผ่าน http แล้วเกิดปัญหาระหว่างการทำงาน ให้แสดงเนื้อหาข้อผิดพลาดในอยู่ในรูปแบบ JSON
  5. การเปลงข้อมูลจาก JSON เป็นข้อมูล Lua table ุ6. แสดงข้อมูล ทำการ Loop ข้อมูลในแต่ละ posts แล้วนำเสนอข้อมูลข้อมูลในรูปแบบ Title และ Body

สรุป

การเชื่อมต่อด้วยภาษา Lua สามารถเรียกใช้ LuaSocket และ dkjson จาก JSONPlaceholder ได้โดยตรง ซึ่งการจัดทำข้อมูลในบทความนี้ เพื่อเป็นการฝึกซ้อมการใช้ทักษะสำหรับการเรียกใช้งานข้อมูลผ่าน API ทำให้ดึงข้อมูลและแสดงผลข้อมูลออกมาใช้งานได้