Auch wenn dies wie ein Duplikat von Java-Webdienste In der Vergangenheit habe ich so viel Zeit investiert, um herauszufinden, wo ich anfangen soll, aber ich konnte es nicht. Es gibt so viele Jargons und Chaos (zumindest für mich!) beim Lesen der Seiten über Webdienste. Es gibt so viele Begriffe - wie JAX-RPC, JAX-WS, Axis, Rest, Servlet as WebService, EJB's
wie Web Service und andere Begriffe, die ich nicht kenne. Kann diese Benutzergruppe einen Überblick über Java Web Services geben, der leicht zu verstehen ist und dem man folgen kann? Ich schätze Ihre Freundlichkeit und danke für Ihre Hilfe.
Antworten
Zu viele Anzeigen?Das ist in der Tat ein bisschen ein Dschungel, um Webdienste zu verstehen. Die wikipedia Seite ist anständig, aber es fehlen noch einige Elemente.
Ich habe diese Antwort als Community-Wiki gekennzeichnet, Sie können sie also gerne aktualisieren oder korrigieren. Es ist nur eine Grundlage.
Ein aufgeblähter Begriff:
Erstens: Der Begriff Webservice wird für viele Dinge verwendet. Während viele Menschen ihn für SOAP-basierte Webdienste verwenden, kann der Begriff für jeden Dienst verwendet werden, der über eine Webschnittstelle bereitgestellt wird; dies ist eine Quelle der Verwirrung.
Implementierung und Designstil:
- SOAP-basiert -- SOAP ist nach wie vor der De-facto-Standard für Webdienste. SOAP ist ein Protokoll, das auf HTTP aufbaut und den Austausch von Nachrichten und Ausnahmen beschreibt. SOAP entwickelte sich von etwas Einfachem zu etwas sehr Kompliziertem mit all den WS-*-Normen die später hinzugefügt wurden. Die wichtigsten sind: WS-Policy, WS-Security, WS-Addressing, WS-Transaction. Eine weitere wichtige Spezifikation ist MTOM für große Nachrichten.
- RESTful -- Der Begriff RESTful bezieht sich auf die Tatsache, dass der Dienst zustandslos ist und alle relevanten Informationen als Parameter übergeben werden. Anstatt ein Protokoll wie SOAP zu verwenden, wird einfaches HTTP Verben verwendet werden, z.B.
Get
,Put
,Delete
,Update
. - Zustandslos -- WS sind in der Regel zustandslos. Geschäftsprozesse stützen sich manchmal auf so genannte Korrelationsbezeichner (mit WS-Adressierung), die verwendet werden, um Anfragen und Antworten einander zuzuordnen; dies ist die gleiche Idee wie die Speicherung eines Sitzungsbezeichners in einem Cookie, da HTTP zustandslos ist.
- Zustandsabhängig -- Es gibt einige Vorschläge für zustandsorientierte WS, aber ich weiß nicht viel darüber.
Implementierung und Technologiepakete:
- Servlet -- Die einfachste Art, eine WS zu implementieren: Sie analysieren die Anfrage und geben die HTTP-Antwort selbst aus.
- EJB -- Seit EJB3 kann EJB sehr einfach als Webdienst dargestellt werden. Dazu ist natürlich ein EJB-Container erforderlich.
- Apache-Achse -- Früher ein beliebter Technologie-Stack, der jetzt rückläufig ist.
- Apache CXF -- Eine weitere beliebte Wahl.
- JBossWS -- Eine weitere beliebte Wahl.
- JAX-WS -- Der offizielle Web Service Stack von Sun, sehr gut. So weit ich weiß, ist das Ersetzt JAX-RPC, das einfach in JAX-WS umbenannt wurde.
Verwandte Konzepte und Fachausdrücke:
- WSDL -- Definiert den Vertrag/die Schnittstelle des Webdienstes, im Falle von SOAP-basierten WS.
- Vertrag-zuerst -- Bezieht sich auf die Tatsache, dass eine Technologie in der Lage ist, jede im Voraus bereitgestellte WSDL zu unterstützen. Im Gegensatz zu einer Implementierungstechnologie, die die WSDL auf der Grundlage der Implementierung des Webdienstes erzeugt, wobei die WSDL nicht immer nach Bedarf angepasst werden kann.
- Profil -- Um dieses Durcheinander zu vereinfachen, wurden Profile eingeführt, bei denen es sich um Gruppen von verwandten Spezifikationen/Fähigkeiten handelt, die für die Interoperabilität unterstützt werden müssen. Das wichtigste davon ist das WS-I Basic Profile.
- UDDI und Erkennung -- Es scheint, dass einige Leute dachten, der Webdienst würde in einem öffentlichen Register veröffentlicht werden, damit er für potenzielle Verbraucher auffindbar ist. Ich glaube nicht, dass sich diese Vision durchgesetzt hat.
Die beste Erklärung, die ich für "contract first" Webdienste kenne, ist Spring-Webdienst-Modul .