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
- Django: Django (< v3) เป็นเฟรมเวิร์ก Python ที่มีความเป็นสมบัติมากมายสำหรับการพัฒนาเว็บแอปพลิเคชันด้าน Backend สร้างมาเพื่อช่วยให้การพัฒนาเว็บแอปพลิเคชันง่ายขึ้น มีการจัดการกับการเชื่อมต่อฐานข้อมูล การจัดการผู้ใช้ การตรวจสอบความถูกต้องของข้อมูลและอื่นๆ
- Flask: Flask เป็นเฟรมเวิร์กชนิดหนึ่งที่ใช้กันอย่างแพร่หลายในการพัฒนาเว็บแอปพลิเคชันด้าน Backend ด้วยภาษา Python เป็นเฟรมเวิร์กที่เล็กแต่มีความยืดหยุ่นสูง มันให้คุณพลตามความต้องการและสร้างแอปพลิเคชันในลักษณะที่คุณต้องการ
- Pyramid: Pyramid คือเฟรมเวิร์กที่ใช้สำหรับการพัฒนาเว็บไซต์ด้าน Backend ใน Python มันมีลักษณะของเครื่องมือที่มีความเป็นสมบัติน้อยกว่า Django แต่ให้คุณความยืดหยุ่นในการออกแบบและกำหนดรูปแบบของแอปพลิเคชันของคุณได้อย่างเต็มที่
- CherryPy: CherryPy เป็นเฟรมเวิร์ก Python ที่ถูกออกแบบมาเพื่อความรวดเร็ว และเป็นเฟรมเวิร์กที่เล็กกว่า Django แต่มีความสามารถที่จำเป็นในการสร้างแอปพลิเคชันเว็บเบสิค มันให้คุณสร้างแอปพลิเคชันซับซ้อนได้อย่างง่ายดาย
- TurboGears: TurboGears เป็นเฟรมเวิร์ก Python ที่ใช้ในการสร้างแอปพลิเคชันเว็บเบสิคและซับซ้อน มันใช้ไม่มากเท่า Django แต่มีความสามารถในการการทำงานร่วมกับฐานข้อมูล การทำความเข้าใจระบบ MVC (Model-View-Controller) และเครื่องมืออื่นๆ