WSGI คืออะไร

WSGI (Web Server Gateway Interface) เกิดขึ้นในปี 2003 โดย Phillip J. Eby ซึ่งเป็นคนก่อตั้งโครงการ Python Paste ซึ่งเป็นชุดเครื่องมือสำหรับการพัฒนาแอปพลิเคชัน web ในภาษา Python ในปี 2003 และได้นำเสนอ WSGI เป็นมาตรฐานที่ช่วยให้นักพัฒนาสามารถเชื่อมต่อแอปพลิเคชัน Python กับเว็บเซิร์ฟเวอร์หลายๆ รูปแบบได้ ทำให้เกิดความยืดหยุ่นและสามารถนำแอปพลิเคชันไปใช้กับเซิร์ฟเวอร์หลายๆ แพลตฟอร์มได้โดยไม่ต้องเปลี่ยนแปลงโค้ดภายในของแอปพลิเคชัน นับว่า WSGI เป็นพื้นฐานที่สำคัญในการพัฒนาแอปพลิเคชันเว็บในภาษา Python ที่ยังคงใช้งานอยู่ในปัจจุบัน

WSGI คือ Web Server Gateway Interface ซึ่งเป็นหนึ่งในอินเทอร์เฟซเกตเวย์ (interface gateway) สำหรับเชื่อมต่อระหว่างเว็บเซิร์ฟเวอร์ (web server) และแอปพลิเคชันเว็บ (web application) ในภาษา Python โดยเฉพาะ ระบบ WSGI อนุญาตให้เว็บเซิร์ฟเวอร์และแอปพลิเคชันเว็บทำงานร่วมกันได้ง่ายขึ้น โดยเว็บเซิร์ฟเวอร์ส่ง request จากผู้ใช้ไปยังแอปพลิเคชันเว็บ และแอปพลิเคชันนั้นจะตอบกลับด้วย response ไปยังเว็บเซิร์ฟเวอร์ และเว็บเซิร์ฟเวอร์จะส่ง response กลับไปยังผู้ใช้

ตัวอย่างของ WSGI application ที่ใช้ Flask คือ:

# app.py
from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello():
    return "Hello, World!"

if __name__ == '__main__':
    app.run()

ในตัวอย่างนี้เราใช้ Flask เป็นเฟรมเวิร์กสำหรับเขียนแอปพลิเคชัน WSGI ซึ่งมีส่วนของ WSGI และส่วนของแอปพลิเคชัน (hello function) ที่ถูกเรียกตาม request ที่มาถึง ซึ่ง WSGI จะคอยเป็นตัวกลางในการติดต่อระหว่างเว็บเซิร์ฟเวอร์กับ Flask application ในที่นี้

สำหรับ Django จากตัวอย่างของการใช้งาน WSGI กับ Django สามารถเขียนได้ดังนี้:

# wsgi.py
import os
from django.core.wsgi import get_wsgi_application

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'project.settings')
application = get_wsgi_application()

ในโค้ดนี้เราใช้ get_wsgi_application() เพื่อรับ WSGI application จาก Django และนำมากำหนดให้กับตัวแปร application เพื่อให้เว็บเซิร์ฟเวอร์สามารถเรียกใช้ WSGI application ของ Django ได้ โดยตัวแปร application จะถูกเรียกตาม request ที่เข้ามาในเว็บเซิร์ฟเวอร์

หมายเหตุ: ตั้งแต่ Django version 3 ขึ้นไป นอกจาก WSGI ยังรองรับ ASGI ซึ่งเป็นอีกหนึ่งอินเทอร์เฟซเกตเวย์สำหรับการทำงานแบบ asynchronous ที่มีประสิทธิภาพสูงกว่า WSGI ในบางกรณี การเลือกใช้ WSGI หรือ ASGI ขึ้นอยู่กับว่าแอปพลิเคชันใน Django มีการใช้งาน asynchronous หรือไม่

แนะนำ Framwwork สำหรับใครที่ต้องการทำเว็บไชต์ด้วย เทคโนโลยี่ WSGI

Flask Logo