WS-PG - Paginierung (paging )

Über dieses Dokument

Erstellt von Thomas Muckwar am 21.09.2011.

Einführung

WS-PG (paging) ist eine SOAP-Erweiterung zur Paginierung. Dies ist eine Methode um die Übertragung einer Datenmenge in Einzelübertragungen von Teilmengen der Gesamtdatenmenge zu unterteilen. Somit ist es möglich seitenbasierte Anzeigen einer Datenmenge zu unterstützen, wie es auf vielen Webseiten zur Ergebnisanzeige beispielsweise von Suchergebnissen üblich ist. Beim Abgleich von Datenmengen stellt die Paginierung ein Mittel zur Verbesserung der Ausfallsicherheit der Übertragung dar. Bricht die Verbindung ab, muss lediglich die letzte Seite und nicht die Gesamtdatenmenge neu übertragen werden. Weiterhin ist die Ausfallwahrscheinlichkeit aufgrund von Speicherüberläufen bedingt durch die geringere zu übertragende Datenmenge niedriger. Die Erweiterung entstand im Rahmen einer Diplomarbeit zur Optimierung der Skalierbarkeit einer Dienstplattform [1]. Darin finden sich auch weiterführende Hinweise und Erklärungen zum Konzept und zur Nutzung von WS-PG.

Spezifikation

Voraussetzung zur Anwendung der paging-Erweiterung in einem Web Service ist lediglich die Möglichkeit den SOAP-Header auslesen und setzen zu können. Somit ist sie problemlos in jedem Web Service implementierbar. Mit der Paginierung wird eine Gesamtdatenmenge virtuell in Seiten unterteilt. Zur Übertragung einer einzelnen Seite wird eine sogenannte Seitengröße definiert und beim Abruf der Daten die gewünschte Seitennummer angegeben.

Es wird angenommen, dass jeder Datensatz eine eindeutige Nummer (ID) besitzt und dass sowohl die Seitennummerierung, als auch die Datensatznummerierung bei eins beginnt. Außerdem wird davon ausgegangen, dass die Datensatznummerierung permanent ist und sich nicht ändert. Eine Seite Sn mit der Seitennummer n besteht aus einer Menge von Datensätzen. Die Seitengröße entspricht hierbei der konstanten Anzahl |Sn|an Datensätzen pro Seite. Somit liegen die Datensatznummern x der angeforderten Seite im Intervall (n −1)*|Sn| < x <= n*|Sn|. Eine Seite wird angefordert, indem die Seitennummer und -größe im SOAP-Header bei der Anfrage übergeben werden. Somit können die gewünschten Datensätze ermittelt und gesendet werden. Der Web Service Client nutzt dazu eine Operation des Web Services, der die paging-Erweiterung unterstützt. Die Seitenanzahl bei gegebener Seitengröße wird bei Anforderung der ersten Seite im Header der Antwort zusätzlich übergeben. Im Falle eines Datenabgleichs muss außerdem im Client die jeweils zuletzt angeforderte Seitennummer gespeichert werden. Dies ist nötig um bei einem Übertragungsabbruch den erneuten -aufbau mit der richtigen Seitennummer durchführen zu können. Bei der Verwendung für eine seitenbasierte Anzeige ist die persistente Sicherung der Seitennummer allerdings nicht notwendig.

Der folgende Abschnitt zeigt das XML-Schema für die paging-Erweiterung. Darin wird der Namespace http://serviceplatform.org/spec/paging mit dem Prefix wspg definiert um diese Erweiterung eindeutig festzulegen und Namenskonflikte zu vermeiden. Bei einer Anfrage an die Web Service Operation muss die Seite (page) sowie die Seitengröße (pageSize) angegeben werden. Bei der Antwort muss mit Hilfe des success-Attributs angegeben werden, ob die Paginierung von der Web Service Operation unterstützt wird. Im Falle eines Abrufs der ersten Seite wird im pageCount-Attribut die Seitenanzahl bezüglich der übergebenen Seitengröße angegeben. Um diese Anzahl liefern zu können, kann der SQL-Befehl limit verwendet. Dieser wird von vielen Datenbanken unterstützt, hat allerdings bei einigen Datenbanken einen anderen Namen. Mit ihm ist es möglich eine Teilmenge der Ergebnismenge, die durch das SQL-Statement abgerufen wird, zu erhalten. Mit einem Offset wird die Anzahl der zu überspringenden Ergebnisdatensätze angegeben und ein weiterer Wert gibt die Anzahl der maximal zu liefernden Datensätze.

XML-Schema

<?xml version="1.0" encoding="UTF-8"?>
<schema targetNamespace="http://serviceplatform.org/spec/paging" elementFormDefault="qualified" xmlns="http://www.w3.org/2001/XMLSchema" xmlns:wspg="http://serviceplatform.org/spec/paging">
	<element name="paging" type="wspg:pagingType"/>
	<complexType name="pagingType">
        <attributeGroup ref="wspg:SOAP-Request"/>
        <attributeGroup ref="wspg:SOAP-Response"/>
    </complexType>
	<attributeGroup name="SOAP-Request">
		<attribute name="page" type="int" />
		<attribute name="pageSize" type="int" />
	</attributeGroup>
    <attributeGroup name="SOAP-Response">
    	<attribute name="success" type="boolean" />
		<attribute name="pageCount" type="int" />
    </attributeGroup>
</schema>

Implementierungen

Referenzen

[1] Muckwar, Thomas: Optimierung der Skalierbarkeit einer Dienstplattform durch Einsatz performanter Web-Service-Techniken. Diplomarbeit, Technische Universität Dresden, August 2011.