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.
