웹 서버 게이트웨이 인터페이스
Web Server Gateway InterfaceWeb 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] 정의합니다.
application
2개의 파라미터가 필요합니다.environ
그리고.start_response
.environ
는 CGI 환경변수 및 기타 요구 파라미터와 메타데이터를 적절하게 정의된 [9]키로 포함하는 딕셔너리입니다.start_response
호출 가능 자체이며, 두 가지 위치 매개변수를 취합니다.status
그리고.response_headers
. - 회선 2 콜
start_response
HTTP 상태로 "200 OK"를 지정하고 "Content-Type" 응답 헤더를 지정합니다. - 라인 3은 함수를 발전기로 만듭니다.응답 본문은 바이트 문자열의 반복 가능한 것으로 반환됩니다.
응용 프로그램 호출 예시
WSGI 네트워크 서버의 완전한 예는 이 문서에서는 다루지 않습니다.다음은 WSGI 응용 프로그램을 호출하여 Python [10]개체로 HTTP 상태 행, 응답 헤더 및 응답 본문을 가져오는 방법에 대한 스케치입니다.의 구성 방법에 대한 상세environ
dict가 생략되었습니다.
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를 지원하는 웹 프레임워크는 다음과 같습니다.
- 동작하다
- 블루브람
- 보보[11]
- 병
- 체리피
- 장고[12]
- 이벤트렛[13]
- FastWSGI
- 플라스크
- Falcon(Web 프레임워크)
- Gevent-Fast CGI[15]
- Google App Engine의 webapp2
- 지니콘
- 프리스턴스[16]
- Apache에서[17] 사용하는 mod_wsgi
- 네트워크
- 플라스틱[18]
- 붙여넣기 구성 요소 WebOb는 특히 WSGI 확장입니다.그것은 Pylons 프로젝트에 의해 채택되었다.
- 주탑
- 피라미드
- 다시[19] 켜다
- 토네이도
- 트레이스
- 터보 기어
- Uliweb[20]
- uWSGI
- 웨이트리스[21]
- web.py[22]
- 웹 2py
- 웹레이어[23]
- 베르쿠제크[24]
- 라디칼[25]
현재 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 웹 서버 인터페이스
- PSGI – Perl Web Server 게이트웨이 인터페이스
- SCGI – 심플한 공통 게이트웨이 인터페이스
- JSGI – JavaScript 웹 서버 게이트웨이 인터페이스
레퍼런스
- ^ Simionato, Michele (June 11, 2007). "An Introduction to Web Programming with WSGI".
- ^ Edge, Jake (July 9, 2019). "Mucking about with microframeworks". LWN.
- ^ Goldberg, Kevin (2016-05-09). "An Introduction to Python WSGI Servers for Performance AppDynamics". Application Performance Monitoring Blog AppDynamics. Retrieved 2020-08-20.
- ^ a b "PEP 3333 - Python Web Server Gateway Interface v1.0.1". Python.org. Retrieved 2018-04-04.
- ^ "PEP 333 -- Python Web Server Gateway Interface v1.0". Python.org. Retrieved 2018-04-04.
- ^ "FrontPage - Python Wiki". Python.org. Retrieved 2017-01-27.
- ^ a b "PEP 3333 -- Python Web Server Gateway Interface v1.0.1". Python.org. Retrieved 2018-04-04.
- ^ 즉, "함수, 메서드, 클래스 또는 인스턴스는
__call__
방법" - ^ "PEP 3333 -- Python Web Server Gateway Interface v1.0.1". Python.org. Retrieved 2018-04-04.
- ^ "Creating WSGI Middleware - Alan Christopher Thomas - Minted - PythonKC". YouTube. 2015-08-28. Archived from the original on 2021-12-12. Retrieved 2017-01-27.
- ^ "プエラリアジェルの効果は?". Bobo.digicool.com. Retrieved 2017-01-27.
- ^ "Django without mod_python, and WSGI support Weblog Django". Djangoproject.com. 2005-07-18. Retrieved 2017-01-27.
- ^ "wsgi – WSGI server — Eventlet 0.20.1 documentation". Eventlet.net. Retrieved 2017-01-27.
- ^ "Falcon - Bare-metal web API framework for Python". Retrieved 2017-10-22.
- ^ "gevent-fastcgi 1.0.2.1 : Python Package Index". Pypi.python.org. 2015-12-06. Retrieved 2017-01-27.
- ^ "anomaly/prestans: A WSGI compliant REST micro-framework". GitHub.com. Retrieved 2017-01-27.
- ^ "Google Code Archive - Long-term storage for Google Code Project Hosting". Code.google.com. Retrieved 2017-01-27.
- ^ "Pycnic Framework". Pycnic.nullism.com. Retrieved 2017-01-27.
- ^ "theintencity/restlite: Light-weight RESTful server tools in Python". GitHub.com. Retrieved 2017-01-27.
- ^ "limodou/uliweb: Simple and easy use python web framework". GitHub.com. Retrieved 2017-01-27.
- ^ "waitress documentation". docs.pylonsproject.org. Retrieved 2018-09-26.
- ^ "Welcome to". Web.py. 2009-09-11. Retrieved 2017-01-27.
- ^ "weblayer — weblayer v0.4.3 documentation". Packages.python.org. Retrieved 2017-01-27.
- ^ "Welcome Werkzeug (The Python WSGI Utility Library)". Werkzeug.pocoo.org. Retrieved 2017-01-27.
- ^ "CalDAV and CardDAV Server - A Simple Calendar and Contact Server". Radicale.org. Retrieved 2017-01-27.
- ^ "Module ngx_http_uwsgi_module". Nginx.org. Retrieved 2017-01-27.
- ^ "Python Tools for Visual Studio - Documentation". Pytools.codeplex.com. Retrieved 2017-01-27.
- ^ "Google Code Archive - Long-term storage for Google Code Project Hosting". Code.google.com. Retrieved 2017-01-27.
- ^ "Python ISAPI Extension for IIS download SourceForge.net". Pyisapie.sourceforge.net. 2012-04-24. Retrieved 2017-01-27.