C++ und Webservices

2009-11-20 21:21


Webservices gehören ja jetzt schon länger zum Alltag in der IT, ob XML/RPC, SOAP,REST, RSS,RDF oder ATOM. Häufig stellen sie wichtige Schnittstellen, und werden wohl in der Zukunft noch mehr an Bedeutung gewinnen. Sie dienen der Kommunikation unter verschiedenen IT Systemen und bieten Schnittstellen in standardisierten Formaten an, so dass sie sprachunabhängig genutzt werden können. Auch basieren viele von ihnen auf offenen Protokollen, welche in vielen Sprachen bereits durch eigene Klassen und Libraries unterstützt werden.
Wie sieht es mit der Unterstützung in C++ aus?

Libraries für XML/RPC, SOAP und/oder REST


Ich möchte 3 Libraries für SOAP vorstellen, einige können auch REST.
Die Libraries sind gSOAP, Apache Axis und wsdlpull.
Für XML/RPC gibts es auch XMLRPC++, sowie für Rest mit cgi gibt es restcgi.

gSOAP

gSOAP dürfte wohl mit Apache Axis eine der bekanntesten Libraries für Webservices in C++ sein. gSOAP unterstützt SOAP, XML/RPC und RSS. Die Library selber ist in C implementiert, es gibt allerdings ein Interface welches auch STL Container verwendet als C++ Binding. gSOAP steht unter GPL, es gibt allerdings auch eine kommerzielle Lizenz. gSOAP unterstützt als Plattformen Windows, Linux, Mac und Unix. gSOAP generiert aus WSDL Dateien entsprechende Stubs für Clients, sowie entsprechenden Code für Server. Ein Einstieg findet sich hier.

Apache Axis

Apache Axis ist eine Webservice Library für SOAP, welche aber auch REST und XML/RPC unterstützt. Ähnlich wie gSOAP generiert auch Axis Wrappers/Stubs für Server und Stubs für Clients. Es gibt 2 verschiedene Versionen von Apache Axis: einmal Axis C++ 1.6, welches von 2006 ist, und den Apache Axis2/C Zweig, einer C Implementierung, welche aktueller ist. Evtl. existiert hierfür auch ein entsprechendes C++ Binding. Die Library steht unter der Apache 2.0 License. Beide Libraries sind für den Praxis Einsatz geeignet.

wsdlpull

Im Vergleich zu den 2 vorherigen Libraries ist wsdlpull schon etwas leichtgewichtiger. Auch ist man nicht auf die Generierung von Stubs angewiesen, wsdlpull kann dies dynamisch. Die Library setzt sich aus diesen 3 Komponenten zusammen:
Die Parser sind auch getrennt von der Invocation API einsetzbar. Für das XML Processing kommt XML Pull zum Einsatz. Die Library eignet sich aber eher für die Client Entwicklung, auch gibt es ein paar Einschränkungen, so können z.b. noch keine komplexen Datentypen verarbeitet werden.

XMLRPC++

XMLRPC++ ist eine reine XML/RPC Library, welche für Server und Client Implementierungen geeignet ist. Einen recht guten Artikel zu XML/RPC und XMLRPC++ findet man bei IBM. XMLRPC++ bringt keine Abhängigkeiten, und ist für XML/RPC wohl eine gute Alternative zu den Libraries die auch noch SOAP unterstützen.

restcgi

Für REST gibt es auch noch eine eigene Library, welche REST als cgi Implementation ermöglicht. Als Abhängigkeiten werden die C++ Standard Library, Boost und CPPURI genannt. Für die Ausführung werden mod_fcgi oder mod_fastcgi benötigt.
Weitere Infos zu restcgi finden sich hier, und die Doxygen Doku ist hier.


RSS, ATOM und RDF

Einige Webservices basieren auch auf Feeds, so liefert z.b. Google Daten im Atom Format. Daher ist es auch interessant zu wissen, wie man auf diese Formate in C++ zugreifen kann.

feed-reader-lib

Die feed-reader-lib nutzt einen Trick, um möglichst viele Formate auslesen zu können: die Formate werden mittels XSL transformiert, und dann ausgelesen. Unterstützt werden aktuell RSS, ATOM und RDF. Für weitere Formate wird also nur eine Erweiterung der XSL Transformationen nötig. Beispielcode gibt es hier, man kann mittels eines Iterators über die Einträge des Feeds iterieren. Als Abhängigkeiten werden boost, libcurl, Xerces, Xalan und Zlib genannt.

Redland RDF C Library

Redland ist eine C Library, welche Support für RDF bietet. Redland ist auch unter dem Namen librdf bekannt. Via SWiG werden weitere Sprachen unterstützt (Python, PHP, Perl, Ruby,Java, TCL und C#).

Soprano

Soprano ist eine RDF Library, welche als Backend u.a. Redland einsetzen kann. Soprano ist in Qt 4 entwickelt. Soprano kommt unter anderem in KDE zum Einsatz. Ein erster Einstieg findet sich hier. Auch ist Soprano ein Teil des Nepomuk Projektes.

Zurück