O Web Server Gateway Interface (WSGI), em português Interface de Porta de Entrada do Servidor Web, é uma especificação para uma interface simples e universal entre servidores web e aplicações web ou frameworks para a linguagem de programação Python. Foi originalmente especificada na PEP 333, de autoria de Philip J. Eby, e publicada em 7 de dezembro de 2003.[1] Desde então foi adotada como um padrão para o desenvolvimento de aplicações web em Python. A última versão da especificação é v1.0.1, também conhecida como PEP 3333, publicada em 26 de setembro de 2010.[2]

Ideia

editar

Frameworks de aplicação web em Python têm sido um problema para novos usuários de Python pois a escolha do framework web pode limitar a escolha de servidores web úteis, e vice-versa.

Aplicações em Python eram frequentemente projetadas para apenas um dos servidores CGI, FastCGI, mod_python ou alguma outra API personalizada de um servidor web específico.

O WSGI foi criado como uma interface de baixo-nível entre servidores web e aplicações web ou frameworks para promover uma base comum para o desenvolvimento de aplicações web portáteis.

Visão geral da especificação

editar

O WSGI possui dois lados: o lado "servidor" ou "gateway" e o lado "aplicação" ou "framework". Para processar uma requisição WSGI, o lado servidor fornece informações de ambiente e uma função de callback para o lado aplicação. A aplicação processa a requisição e retorna a resposta para o lado servidor usando a função de callback que o lado servidor forneceu.

O chamado middleware WSGI implementa os dois lados da API, desta forma ele pode intermediar entre um servidor WSGI e uma aplicação WSGI: o middleware age como uma aplicação de algum ponto de vista do servidor WSGI e como um servidor de algum ponto de vista da aplicação WSGI. Um componente "middleware" pode realizar funções como:

  • Rotear uma requisição para diferentes objetos da aplicação baseados na URL alvo, após mudar as variáveis de ambiente adequadamente.
  • Permitir várias aplicações ou frameworks executarem lado a lado no mesmo processo
  • Balanceamento de carga e processamento remoto, enviando requisições e respostas sobre uma rede
  • Realizar pós-processamento de conteúdo, como aplicar folhas de estilo XSLT

Aplicação de exemplo

editar

Uma aplicação "Olá Mundo" compatível com WSGI escrita em Python:

def aplicacao(ambiente, resposta_inicio):
    resposta_inicio('200 OK', [('Content-Type', 'text/plain')])
    yield 'Olá Mundo\n'

Onde:

  • Linha 1 define um "chamável" denominado aplicacao, que leva dois parâmetros, ambiente e resposta_inicio. ambiente é um dicionário contendo variáveis de ambiente em CGI. resposta_inicio é um "chamável" que leva dois parâmetros necessários estado e cabecalhos_resposta.
  • Linha 2 chama resposta_inicio, especificando "200 OK" como o estado e o cabeçalho "Content-Type".
  • Linha 3 retorna o corpo de resposta como um literal string.

Aplicações e frameworks compatíveis com WSGI

editar

Há vários frameworks de aplicação web que suportam WSGI:

Servidores que suportam WSGI

editar

Esta é uma lista de servidores WSGI. Em alguns casos são apenas sistemas WSGI, em outros um pacote que inclui um servidor.

Ligações externas

editar

Referências

📚 Artikel Terkait di Wikipedia

CherryPy

WSGI, incluindo Apache, IIS, lighttpd, ngInx, mod_python, FastCGI, SCGI e mod_wsgi. Um adaptador mod_python nativo. Vários servidores HTTP (por exemplo

Aritmética modular

e Python) ou "mod" (p.ex. in Pascal, BASIC, SQL, Haskell), com exceções (p.ex. em Excel). Estes operadores são normalmente pronunciados como "mod", mas

Phusion Passenger

conhecido como mod_rails e mod_rack entre a comunidade Ruby) é um servidor web gratuito e servidor de aplicativos com suporte para Ruby, Python e Node.js.

Ano bissexto

EhAnoBissexto(const pAno: Word): Boolean; begin Result := (pAno mod 400 = 0) or ((pAno mod 4 = 0) and (pAno mod 100 <> 0)); end; Em JavaScript: let ano = 2016; if

Conjectura de Collatz

{\displaystyle C} é definida tal que: C ( x ) = { 3 x + 1 if  x ≡ 1 ( mod 2 ) x / 2 if  x ≡ 0 ( mod 2 ) {\displaystyle C(x)={\begin{cases}3x+1&{\text{if }}x\equiv

Conjectura de Agoh–Giuga

somente se   p B p − 1 ≡ − 1 ( mod p ) {\displaystyle pB_{p-1}\equiv -1{\pmod {p}}} , ou seja, se ∑ i = 1 p − 1 i p − 1 ≡ − 1 ( mod p ) {\displaystyle \sum

Programação quântica

circuitos quânticos fotônicos e desenvolver algoritmos quânticos, baseado em Python. As simulações são executadas tanto no próprio computador do usuário quanto

CUDA

ampla gama de outras linguagens de programação, incluindo C++, Fortran, Python e Julia. Essa acessibilidade torna mais fácil para especialistas em programação