웹 서버 게이트웨이 인터페이스

Web Server Gateway Interface

Web Server Gateway Interface(WSGI, 위스키 또는 WIZ-ghee[3] 발음[1][2])는 웹 서버가 Python 프로그래밍 언어로 작성된 웹 응용 프로그램 또는 프레임워크에 요청전송하기 위한 단순한 호출 규칙입니다.WSGI의 현재 버전 1.0.1은 Python Enhancement Proposal(PEP) 3333에 [4]지정되어 있습니다.

WSGI는 2003년에 [5]PEP-333으로 지정되었습니다.PEP-3333은 2010년에 발행되어 Python 3의 사양을 갱신하고 있습니다.

배경

2003년에 Python프레임워크는 일반적으로 CGI, FastCGI, mod_python 또는 특정 [6]웹 서버의 다른 커스텀 API에 대해서만 작성되었습니다.PEP 333을 인용하려면:

Python은 현재 Zope, Quixote, Webware, Skunk Web, PSO, Twisted Web 등 다양한 웹 애플리케이션 프레임워크를 자랑하고 있다.이러한 광범위한 선택은 새로운 Python 사용자에게 문제가 될 수 있습니다. 왜냐하면 일반적으로 그들의 웹 프레임워크 선택은 그들의 사용 가능한 웹 서버의 선택을 제한하기 때문입니다. 그리고 그 반대도 마찬가지입니다.이와는 대조적으로 Java는 이용할 수 있는 웹 애플리케이션 프레임워크의 수가 동일하지만 Java의 "servlet" API를 통해 Java 웹 애플리케이션 프레임워크로 작성된 애플리케이션을 서블릿 API를 지원하는 웹 서버에서 실행할 수 있습니다.

따라서 WSGI는 웹 서버와 웹 애플리케이션 또는 프레임워크 간의 구현 중립적인 인터페이스로 만들어졌으며, 휴대용 웹 애플리케이션 [4]개발을 위한 공통 기반을 촉진합니다.

사양의 개요

WSGI에는 다음 두 가지 측면이 있습니다.

  • 서버/서버측.이것은 Apache나 Nginx같은 풀 웹 서버 소프트웨어를 실행하거나, 플롭과 같은 웹 서버와 통신할 수 있는 경량 애플리케이션 서버입니다.
  • 응용 프로그램/프로세서 측이것은 Python 프로그램 또는 프레임워크에 의해 제공되는 Python 호출 가능입니다.

서버와 애플리케이션 사이에는 일반적으로 Python 코드로 API의 양쪽을 구현하는 WSGI 미들웨어 컴포넌트가 하나 이상 있을 수 있습니다.

WSGI는 Python 인터프리터를 시작하는 방법과 응용 프로그램 개체를 로드하거나 구성하는 방법을 지정하지 않으며, 프레임워크와 웹 서버마다 다른 방식으로 이를 실현합니다.

WSGI 미들웨어

WSGI 미들웨어 컴포넌트는 자체 WSGI 응용 프로그램인 Python 호출 가능이지만 다른 WSGI 응용 프로그램에 위임하여 요청을 처리할 수 있습니다.이러한 애플리케이션 자체는 WSGI 미들웨어 [7]컴포넌트가 될 수 있습니다.

미들웨어 컴포넌트는 다음과 [7]같은 기능을 수행할 수 있습니다.

  • 환경변수를 적절히 변경한 후 대상 URL에 따라 요청을 다른 응용 프로그램개체로 라우팅합니다.
  • 여러 응용 프로그램 또는 프레임워크를 동일한 프로세스에서 병렬로 실행할 수 있습니다.
  • 네트워크를 통해 요청 및 응답을 전송하여 로드 밸런싱 및 원격 처리
  • XSLT 스타일시트 적용과 같은 내용 후 처리 수행

적용 예

Python으로 작성된 WSGI 호환 "Hello, World!" 응용 프로그램:

방어하다 어플(환경, start_response):     start_response('200 OK', [('콘텐츠 유형', '텍스트/메시지')])     산출하다 b안녕, 세상아!\n' 

장소:

  • 행 1은 다음과 같은 함수를[8] 정의합니다.application2개의 파라미터가 필요합니다.environ그리고.start_response.environCGI 환경변수 및 기타 요구 파라미터와 메타데이터를 적절하게 정의된 [9]키로 포함하는 딕셔너리입니다. start_response호출 가능 자체이며, 두 가지 위치 매개변수를 취합니다.status그리고.response_headers.
  • 회선 2 콜start_responseHTTP 상태로 "200 OK"를 지정하고 "Content-Type" 응답 헤더를 지정합니다.
  • 라인 3은 함수를 발전기로 만듭니다.응답 본문은 바이트 문자열의 반복 가능한 것으로 반환됩니다.

응용 프로그램 호출 예시

WSGI 네트워크 서버의 완전한 예는 이 문서에서는 다루지 않습니다.다음은 WSGI 응용 프로그램을 호출하여 Python [10]개체로 HTTP 상태 행, 응답 헤더 및 응답 본문을 가져오는 방법에 대한 스케치입니다.의 구성 방법에 대한 상세environdict가 생략되었습니다.

from io Import 바이트IO def call_application(, 환경): 상태 = 머리글 없음 = 본문 없음 = 바이트IO() def start_response(rstatus, rheaders): 로컬이 아닌 상태, 헤더 상태, 헤더 = rstatus, rheaders app(환경, start_response) 시도: app_iter데이터대해 assert 상태없음, 헤더는 없음, \start_response()는 호출되지 않았습니다.write(데이터): hasattr(app_iter, 'close'): app_iter.close() 상태, 헤더, body.getvalue() 환경 = {...} # "환경" dict 상태, 헤더, 본문 = call_application(, 환경)

WSGI 호환 어플리케이션 및 프레임워크

WSGI를 지원하는 웹 프레임워크는 다음과 같습니다.

현재 Fast CGI, CGI, SCGI, AJP(플롭 사용), 트위스트에 대해 래퍼를 사용할 수 있습니다.web, Apache(mod_wsgi 또는 mod_python 사용), Nginx(ngx_http_uwsgi_module [26]사용), Microsoft IIS(WFastCGI,[27] isapi-wsgi,[28][29] PyISAPie 또는 ASP 게이트웨이 사용)가 있습니다.

「 」를 참조해 주세요.

  • ASGI – WSGI의 정신적 후계자로 비동기 애플리케이션 지원 추가
  • – Ruby 웹 서버 인터페이스
  • PSGIPerl Web Server 게이트웨이 인터페이스
  • SCGI – 심플한 공통 게이트웨이 인터페이스
  • JSGIJavaScript 웹 서버 게이트웨이 인터페이스

레퍼런스

  1. ^ Simionato, Michele (June 11, 2007). "An Introduction to Web Programming with WSGI".
  2. ^ Edge, Jake (July 9, 2019). "Mucking about with microframeworks". LWN.
  3. ^ Goldberg, Kevin (2016-05-09). "An Introduction to Python WSGI Servers for Performance AppDynamics". Application Performance Monitoring Blog AppDynamics. Retrieved 2020-08-20.
  4. ^ a b "PEP 3333 - Python Web Server Gateway Interface v1.0.1". Python.org. Retrieved 2018-04-04.
  5. ^ "PEP 333 -- Python Web Server Gateway Interface v1.0". Python.org. Retrieved 2018-04-04.
  6. ^ "FrontPage - Python Wiki". Python.org. Retrieved 2017-01-27.
  7. ^ a b "PEP 3333 -- Python Web Server Gateway Interface v1.0.1". Python.org. Retrieved 2018-04-04.
  8. ^ 즉, "함수, 메서드, 클래스 또는 인스턴스는__call__방법"
  9. ^ "PEP 3333 -- Python Web Server Gateway Interface v1.0.1". Python.org. Retrieved 2018-04-04.
  10. ^ "Creating WSGI Middleware - Alan Christopher Thomas - Minted - PythonKC". YouTube. 2015-08-28. Archived from the original on 2021-12-12. Retrieved 2017-01-27.
  11. ^ "プエラリアジェルの効果は?". Bobo.digicool.com. Retrieved 2017-01-27.
  12. ^ "Django without mod_python, and WSGI support Weblog Django". Djangoproject.com. 2005-07-18. Retrieved 2017-01-27.
  13. ^ "wsgi – WSGI server — Eventlet 0.20.1 documentation". Eventlet.net. Retrieved 2017-01-27.
  14. ^ "Falcon - Bare-metal web API framework for Python". Retrieved 2017-10-22.
  15. ^ "gevent-fastcgi 1.0.2.1 : Python Package Index". Pypi.python.org. 2015-12-06. Retrieved 2017-01-27.
  16. ^ "anomaly/prestans: A WSGI compliant REST micro-framework". GitHub.com. Retrieved 2017-01-27.
  17. ^ "Google Code Archive - Long-term storage for Google Code Project Hosting". Code.google.com. Retrieved 2017-01-27.
  18. ^ "Pycnic Framework". Pycnic.nullism.com. Retrieved 2017-01-27.
  19. ^ "theintencity/restlite: Light-weight RESTful server tools in Python". GitHub.com. Retrieved 2017-01-27.
  20. ^ "limodou/uliweb: Simple and easy use python web framework". GitHub.com. Retrieved 2017-01-27.
  21. ^ "waitress documentation". docs.pylonsproject.org. Retrieved 2018-09-26.
  22. ^ "Welcome to". Web.py. 2009-09-11. Retrieved 2017-01-27.
  23. ^ "weblayer — weblayer v0.4.3 documentation". Packages.python.org. Retrieved 2017-01-27.
  24. ^ "Welcome Werkzeug (The Python WSGI Utility Library)". Werkzeug.pocoo.org. Retrieved 2017-01-27.
  25. ^ "CalDAV and CardDAV Server - A Simple Calendar and Contact Server". Radicale.org. Retrieved 2017-01-27.
  26. ^ "Module ngx_http_uwsgi_module". Nginx.org. Retrieved 2017-01-27.
  27. ^ "Python Tools for Visual Studio - Documentation". Pytools.codeplex.com. Retrieved 2017-01-27.
  28. ^ "Google Code Archive - Long-term storage for Google Code Project Hosting". Code.google.com. Retrieved 2017-01-27.
  29. ^ "Python ISAPI Extension for IIS download SourceForge.net". Pyisapie.sourceforge.net. 2012-04-24. Retrieved 2017-01-27.

외부 링크