Leer WSGI en laat Python het kleine spul zweten

Openbaarmaking: Uw steun helpt de site draaiende te houden! We verdienen een verwijzingsvergoeding voor sommige van de services die we op deze pagina aanbevelen.


Vroeger was het ontwikkelen van webapplicaties in Python vroeger problematisch, omdat ontwikkelaars extra zorg moesten besteden en ervoor moesten zorgen dat hun webapplicatie soepel zou draaien op verschillende webservers en verschillende webframeworks voor Python. De keuze van een specifiek Python-webframework tijdens de ontwikkeling van applicaties beperkte de keuze van compatibele webservers die de voltooide applicatie konden uitvoeren.

Web Server Gateway Interface (WSGI) werd geïntroduceerd als oplossing voor dit probleem. WSGI is een specificatie voor een gestandaardiseerde interface voor communicatie tussen webservers en Python-webframeworks of -toepassingen. Als een applicatie of een framework is geschreven om te voldoen aan de WSGI-specificatie, wordt deze uitgevoerd op elke webserver die dezelfde specificatie ondersteunt.

Python is natuurlijk niet de enige programmeertaal met een gestandaardiseerde interface-specificatie. Veel moderne programmeertalen gebruiken dezelfde aanpak, dus Ruby gebruikt bijvoorbeeld zijn eigen Rack-serverinterface, JavaScript vertrouwt op zijn JSGI-gateway-interface, terwijl Perl PSGI gebruikt.

Korte geschiedenis

De WSGI-specificatie werd oorspronkelijk geïntroduceerd in het Python Enhancement Proposal 333 (PEP 333), geschreven door Phillip J Eby en gepubliceerd in december 2003. Dit eerste WSGI-specificatieontwerp legde de basisprincipes en doelen voor WSGI vast – het moest gemakkelijk te implementeren zijn , eenvoudig en universeel, en moest een gemakkelijke koppeling van bestaande servers en frameworks mogelijk maken.

WSGI werd snel overgenomen door Python-server- en framework-auteurs en -ontwikkelaars en werd de de facto standaard voor de ontwikkeling van Python-webapplicaties. De nieuwste versie van de WSGI-specificatie is V1.0.1, gepubliceerd in PEP 3333 op 26 september 2010.

Overzicht van WSGI-specificaties

De WSGI-specificatie vermeldt drie specifieke rollen: de serverzijde, de toepassingszijde en de middleware-component, die zowel de server- als toepassingszijde van de interface implementeert.

De toepassingskant

De toepassingszijde van de WSGI is een eenvoudig object dat twee argumenten accepteert en vanuit code kan worden aangeroepen. Dit voorbeeld toont een eenvoudige WSGI-applicatie die een statische “Hallo wereld!” bladzijde:

def simple_app (environment, start_response):
status = ‘200 OK’
response_headers = [(‘Content-type’, ‘text / plain’)]
start_response (status, response_headers)
terugkeer [‘Hallo wereld! n’]

Objecten aan de toepassingszijde kunnen meerdere keren worden aangeroepen, aangezien alle servers dergelijke herhaalde verzoeken doen.

De serverkant

De serverzijde van WSGI ontvangt eenvoudig verzoeken van de HTTP-client, roept de applicatie eenmaal aan voor elk verzoek en stuurt het antwoord dat door de applicatie wordt geretourneerd naar de client.

De middleware-component

Middleware-componenten die in de WSGI-specificatie zijn gedefinieerd, gebruiken beide zijden van de interface – zowel de toepassingskant als de serverkant. Middleware-functies zijn transparant voor zowel de serverkant als de applicatiezijde.

Middleware-componenten voeren gewoonlijk functies uit zoals het routeren van aanvragen naar verschillende applicatieobjecten op basis van de doel-URL, waardoor meerdere applicaties naast elkaar kunnen worden uitgevoerd in hetzelfde proces. Ze maken load balancing, verwerking op afstand of nabewerking van inhoud mogelijk.

Dit voorbeeld toont een eenvoudige middleware-component die alles wat het ontvangt in hoofdletters weergeeft:

klasse Upperware:
def __init __ (zelf, app):
self.wrapped_app = app

def __call __ (self, environment, start_response):
voor gegevens in self.wrapped_app (environment, start_response):
data.upper () retourneren

WSGI gebruiken

WSGI wordt nu geaccepteerd als standaard voor de ontwikkeling van Python-webapplicaties. Python versie 2.5 en daaropvolgende releases bieden ingebouwde WSGI-ondersteuning. In Python-versies 2.4 en eerder kan WSGI-ondersteuning afzonderlijk worden geïnstalleerd. Er is een bijgewerkte versie van de WSGI-specificatie zoals gedeclareerd in PEP 3333 beschikbaar voor Python 3.

Als u webtoepassingen in Python ontwikkelt, gebruikt u gewoon een in de branche bewezen standaard, zoals Django, Flask of Bottle Python-webframeworks, of een ander huidig ​​Python-framework. Het is niet nodig om veel te leren over de WSGI-specificatie om applicaties te bouwen. Gebruik gewoon een webapplicatiekader van de huidige generatie en u zou duidelijk moeten zijn, omdat ze allemaal WSGI ondersteunen.

Aan de andere kant, als u zelf een nieuw webapplicatiekader ontwikkelt, moet u zeker de WSGI-specificatie eens goed bekijken en enkele leermiddelen voor WSGI bekijken.

WSGI-bronnen

Als u meer wilt weten over WSGI, raden we u aan een aantal van de volgende online bronnen te bekijken:

  • De WSGI Community-site is natuurlijk de eerste plaats om te bezoeken. Je kunt veel nuttige bronnen vinden en er is ook een leuke sectie Meer over WSGI. Deze site bevat ook de frameworks en servers die WSGI ondersteunen.
  • Je kunt ook het volledige Python Enhancement Proposal 333 en het Python Enhancement Proposal 3333 lezen voor meer informatie.
  • Pylons Web Development Framework Online Documentation heeft een heel mooi en gedetailleerd gedeelte over WSGI.
  • De WSGI-zelfstudie van Codepoint zal de WSGI-specificatie aan het werk demonstreren aan de hand van enkele eenvoudige voorbeelden.

WSGI-boeken

Boeken die specifiek betrekking hebben op WSGI zijn moeilijk te vinden, en je zult hoofdstukken over WSGI meestal vinden in verschillende programmeerboeken voor Python-webtoepassingen, zoals deze:

  • Grondslagen van Python-netwerkprogrammering: de uitgebreide handleiding voor het bouwen van netwerkapplicaties met Python door Goerzen, Bower en Rhodes: Het hoofdstuk over programmeren van webapplicaties omvat zowel de WSGI-standaard voor interoperabiliteit van componenten, als moderne webframeworks zoals Django.

Conclusie

WSGI is een essentiële Python-specificatie, maar in werkelijkheid hoeven de meeste Python-ontwikkelaars zich daar geen zorgen over te maken. Zolang ze een belangrijk raamwerk gebruiken, profiteren ze van WSGI zonder erbij na te denken. Met andere woorden, de meeste ontwikkelaars hebben geen grondige kennis van WSGI nodig, omdat de specificatie is geïmplementeerd in alle belangrijke Python-frameworks.

Dat gezegd hebbende, WSGI is nog steeds relevant, hoewel het geen vereiste is voor Python-programmering. Een opmerkelijke uitzondering zijn software-ingenieurs die besluiten om te werken aan Python-frameworks in plaats van Python-applicaties. WSGI is wat hen betreft een onmisbare specificatie en ze moeten de ins en outs van WSGI kennen als ze hopen dit in hun raamwerk te integreren.

Dit is natuurlijk een (zeer) krappe niche, maar dat betekent niet dat de ontwikkeling van WSGI tot stilstand is gekomen. Het betekent alleen dat de community niet groot is, maar het is er wel.

Verder lezen en bronnen

We hebben meer handleidingen, tutorials en infographics met betrekking tot codering en ontwikkeling:

  • Python-introductie, bronnen en veelgestelde vragen: als je nieuw bent bij Python, zal deze introductie je op weg helpen.
  • MPI – Inleiding, geschiedenis en bronnen: met de Message Passing Interface (MPI) kunnen programma’s en andere computersystemen berichten naar elkaar sturen.
  • Inleiding en bronnen voor Linux-programmering: deze diepe duik in Linux-programmering komt terecht in de kernel waar alle actie is.

Welke code moet je leren?

Weet u niet zeker in welke programmeertaal u moet leren coderen? Bekijk onze infographic Welke code moet u leren? Het bespreekt niet alleen verschillende aspecten van de talen, het beantwoordt belangrijke vragen zoals: “Hoeveel geld zal ik verdienen met het programmeren van Java voor de kost?”

Welke code moet je leren?
Welke code moet je leren?

Jeffrey Wilson Administrator
Sorry! The Author has not filled his profile.
follow me