Frage

Ich bin die Umsetzung Web-Service für eine PHP-Anwendung und ich versuche zu verstehen, was die beide Standard-Web-Service und RESTful Web-Service zu bieten haben. Meine Absicht ist es Wrapper-Code zu abstrahieren die Web-Service-Details zu schreiben, so dass Entwickler können nur „entfernte Objekte instanziiert“ und sie verwenden. Hier sind meine Gedanken, vielleicht einige von euch könnte Ihre Erfahrung hinzufügen und erweitern diese:

RESTful Web Servcies

sind im Grunde nur "XML-Feeds on demand", also beispielsweise Sie können Wrapper-Code für eine Client-Anwendung schreiben, so dass es die Server-Anwendung auf diese Weise abgefragt werden kann:

$users = Users::getUsers("state = 'CO'");
  • dies wiederum würde sich ein XML-Feed eine Remote-URL bilden
  • $ Nutzer könnten in eine Sammlung von vollständigen Benutzerobjekte vorgenommen werden, oder
  • als XML links oder
  • verwandelte sich in ein Array, etc.
  • der Abfrage-Skript ( "state = 'CO'") würde in SQL auf der Serverseite übersetzt werden
  • RESTful Web Service sind im Allgemeinen schreibgeschützt aus der Sicht des Kunden, obwohl Sie Code schreiben könnten, die POST verwenden könnte oder GET an den Server Änderungen an, zum Beispiel ein verschlüsseltes Token für Sicherheit vorbei, z.

    $ users = Benutzer :: addUser ($ encryptedTrustToken, 'jim', $ EncryptedPassword, 'James', 'Taylor');

und dies würde einen neuen Benutzer auf der Server-Anwendung erstellen.

Standard Web Services

Standard Web Servcies am Ende tun im Grunde das gleiche. Der einzige Vorteil, den sie haben, ist, dass der Client seine Daten über WSDL entdecken können. Aber anders als das, wenn ich Wrapper-Code schreiben möchten, die ein Entwickler zu instanziiert erlaubt, bearbeiten und Objekte speichern Ferne, ich muss noch den Wrapper-Code implementieren. SOAP nicht tut jeder, dass für mich, es kann dies tun:

$soap = new nusoap_client('http://localhost/test/webservice_user.php?wsdl', true);
$user = $soap->getProxy(); 
$lastName = $user->lastName();

aber wenn ich will, bearbeiten und speichern:

$user->setLastName('Jones');
$user->save();

dann muss ich zum Beispiel behandeln alle des Staates auf der Server-Seite, SOAP scheint nicht das Objekt auf der Server-Seite für jeden Kunden zu halten.

Vielleicht gibt es Einschränkungen in der PHP-SOAP-Implementierung Ich verwende (nusoap). Vielleicht Java und .NET-Implementierungen noch viel mehr.

Wird hören Feedback genießen einige dieser Wolken zu klären.

War es hilfreich?

Lösung

Sie sind verschiedene Modelle ... REST ist Daten-zentriert , wobei-wie SOAP ist Betrieb zentriert . das heißt mit SOAP neigen Sie dazu, diskrete Operationen „SubmitOrder“, etc zu haben; aber mit REST sind Sie in der Regel viel mehr Flüssigkeit darüber, wie Sie die Daten abfragen.

SOAP neigt auch dazu, mit viel mehr Aufwand verbunden zu werden (was manchmal notwendig ist) - REST ist zurück zu POX etc, und YAGNI .


In Bezug auf die .NET-Tools wie "wsdl.exe" wird Ihnen eine vollständige Client-Seite Proxy-Bibliothek einen SOAP-Dienst stellen (oder "svcutil.exe" für einen WCF-Dienst):

var someResult = proxy.SubmitOrder(...);

Für REST mit .NET, ich denke, ADO.NET Data Service der naheliegendste Spieler ist. Hier werden die Werkzeuge (datasvcutil.exe) geben Ihnen einen vollständigen Client-seitige Daten Zusammenhang mit LINQ-Unterstützung. LINQ ist .NET ist relativ neue Art und Weise komplexe Abfragen zu bilden. So etwas wie (mit stark / statischer Typprüfung und IntelliSense):

var qry = from user in ctx.Users
          where user.State == 'CO'
          select user;

(wird dies zu / von der entsprechenden REST-Syntax für ADO.NET Data Service übersetzt werden)

Andere Tipps

ich wieder, was Marc GRA erwähnt. Wenn die Leute fragen mich über REST (und sie haben in der Regel eine Vorstellung über SOAP und SOA), werde ich ihnen sagen, ROA REST = wie es Ressourcen- / Daten orientiert ist, es ist ein anderes Paradigma ist und daher unterschiedliche Design Bedenken hat.

Für Ihren Fall, wenn ich Sie richtig bin zu lesen, möchten Sie die Wrapper-Code zu vermeiden, schreiben und benötigen eine Lösung, die remote Objekte und deren Attribute gespeichert werden können (und haben sie völlig von den Entwicklern versteckt). Ich kann nicht wirklich eine bessere Lösung vorschlagen .. Umm, lassen Sie mich wissen, ob eine dieser jemals nahe kommt Ihre Anforderungen gerecht zu werden:

  1. EJB3 / JPA
  2. CouchDB (REST / JSON)

Lassen Sie mich wissen, ob ich Ihre Frage falsch interpretiert haben.

Wenn wir XML-RPC und SOAP vergleichen zu können, wird dieser Ihnen eine bessere Datentypen Handhabung für das ehemalige, obwohl Sie mit einfacheren Datentypen zu tun, aber Sie müssen eine Schicht oder einen Adapter schreibt sie in Ihrer Domain zu konvertieren Objekte.

yc

Soap ist nur eine Reihe von durch eine Normengruppe gesegnet auf XML-Schemata vereinbart. Es ist Stärke ist, dass es für die Interoperabilität entwickelt wurde und unterstützt viele der Enterprise-Klasse. Soap auf jeder Plattform nicht bieten die Operationen, die Sie suchen. Sie müssen entwerfen und den Servicevertrag zu implementieren, um diese Funktionen zu erhalten.

Klingt wie Sie entfernte Objekte wollen, die weder Seife oder REST sind besonders gut für. Vielleicht würden Sie besser dran sein Blick auf XML-RPC .

Die wichtigsten Unterschiede sind grundsätzlich Tooling.

Viele der High-End-SOAP-Stacks verhüllen die große Masse der SOAP-Infrastruktur vom Entwickler, wo man so ziemlich allein mit DTO / Dokumente und RPC arbeiten.

REST über HTTP legt mehr von dieser Last auf euch den Entwickler (Verhandlungsformate [XML, JSON, HTTP POST], Parsing Ergebnisse [DOM, Karten, DTO Rangier usw.]).

Natürlich können Sie eine Schicht Logik schreiben mit diesem Detail zu erleichtern den Umgang. Und einige REST-Frameworks sind da dies einfacher zu machen, aber im Moment ist es noch eine Aufgabe auf Ihrer ToDo-Liste, wenn Sie möchten, solche Dienste nutzen oder zu konsumieren.

Ihr Feedback ist, dass, wenn Sie Remote-Zustand wollen, Sie sprechen nicht über Web-Services. Ich kenne kein zeitgemäßes Modell über die die Remote-Zustand beschäftigen. Ich glaube, dass, wenn Sie Remote-Zustand müssen Sie auf eigene Faust (ohne Religion zu folgen). werfen xml nur von hier nach dort und nichts dagegen der Theorie.

Ich muss hinzufügen, dass Remote-Zustand schlecht ist. Vermeiden Sie es, wenn Sie können.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top