Ich fange gerade erst mit .Net WebApi an und bemerke sofort, dass es keinen Vertrag gibt, der definiert, wie die API aussieht und wie sie verwendet werden soll (Anfragen / Antworten von jeder Aktion). Dies erfolgt normalerweise in Form von eine WSDL für WCF / Soap.
Mir scheint, dies ist etwas, das sehr wertvoll ist und den Verbrauchern Ihrer API das Leben erheblich erleichtert.
Gibt es einen Grund, warum es keinen gibt? Gibt es ein Programmierparadigma oder -prinzip, das mir nicht bekannt ist? Gibt es eine Möglichkeit, eine zu erstellen?
c#
asp.net-mvc
web-api
Shenku
quelle
quelle
Antworten:
Seife, Ruhe und Kreativität der Menschen
SOAP benötigt ein Beschreibungsdokument wie WSDL, da jede Ressource mit unterschiedlichen Nachrichten belegt werden kann. Das Protokoll enthält keine Definition zu Einschränkungen hinsichtlich der möglichen Namen / Nachrichten, die Sie für die Bearbeitung einer Ressource verwenden können.
Beispiel: In SOAP kann Ihr Webdienst, der es Clients ermöglicht, einen Benutzer zu manipulieren, den Vorgang, mit dem ein Benutzer erstellt wird, in vielen verschiedenen Nachrichten offen legen, z.
Dies sind natürlich nur ein paar Beispielnachrichten, da ich viele lustige Namen von Webservices-Methoden gesehen habe. Es gibt wirklich kreative Leute da draußen.
Wenn Sie Ihr zugrunde liegendes System mit einer Web-API verfügbar machen, die die REST-Prinzipien wirklich respektiert, muss der Client lediglich wissen, dass Sie eine Ressource mit dem Namen Benutzer haben, da die Wahrscheinlichkeit, dass Sie einen Benutzer in dieser Ressource erstellen, 99% beträgt Weg
Dies geschieht für jeden Vorgang, den Sie mit SOAP oder einem Web-API-REST verfügbar machen möchten.
Obwohl SOAP ein Protokoll ist, das einschränkt, was Sie tun können oder nicht, und REST eine Stilarchitektur ist, die viele offene Punkte für die Vorgehensweise lässt. Es gibt Bestrebungen, Konventionen zu definieren, wie REST-Web-APIs verfügbar gemacht und verwendet werden sollen.
BESCHREIBEN EINES WEB-API-REST
Im Bereich der Beschreibung eines Web-API-REST kann ich Swagger zitieren . Es ist kein Versuch, eine WSDL wie Web-API-REST zu erstellen, aber ein guter Versuch, einen offenen Standard für die Beschreibung von Web-API-REST zu erstellen.
Ich benutze Swagger sehr oft und liebe es wirklich, vor allem, weil die Swagger-Benutzeroberfläche es Ihnen ermöglicht, eine schöne Live-Konsole und Dokumentation für Ihre Web-API zu erstellen.
Es gibt viele Implementierungen von Swagger für die meisten Sprachen: C #, Java, Python, Ruby usw.
Wenn Sie die ASP .NET-Web-API verwenden, gibt es einige Projekte, mit denen die Swagger-Spezifikation automatisch generiert werden kann, z. B. Swagger.NET
Erzeugen von Kunden für einen Web-API-Rest
Da die Einschränkungen von REST, wie die begrenzte Anzahl von Verben (GET, POST, PUT, DELETE usw.), nicht so schwierig sind, eine Clientbibliothek für eine Web-API-REST zu generieren.
Projekte wie WebApiProxy können auf einfache Weise Clients für C # und Javascript generieren.
KONVENTIONEN FÜR WEB-API-REST
Um unser Leben als Entwickler zu vereinfachen, sollten Sie einige Konventionen definieren, wie sich unser Web-API-REST verhält. Die beste Anstrengung, die ich auf diesem Gebiet kenne, ist das sehr gute E-Book Apigee - Web Api Design . Das E-Book ist kein Versuch, eine Bibel oder ein Mantra zum Entwerfen Ihrer API zu erstellen, sondern eine Sammlung von Konventionen, die in großen Web-REST-APIs wie Twitter, Facebook, Linkedin, Google usw. beachtet werden.
quelle
GET
sind einfacher, ja. Aber zu wissen , was Verben sind wahrscheinlich nicht bedeuten , unterstützt wird , Sie mit einer API interagieren können überhaupt . Wir haben noch keine Schema- oder Domänenkenntnisse. Die eigentliche Antwort ist, wenn wir ehrlich sind, dass unsere Serviceänderungen Verträge mit Integrationen nicht explizit brechen, wenn kein Vertrag (WSDL) zu brechen ist. Und im Internet möchten wir, dass die Freiheit besteht, Dinge wohl oder übel, ohne Schuldgefühle und so weiter zu ändern. Aber wir müssen trotzdem die API-Dokumente lesen und * experimentieren ... Also sind wir damit größtenteilsKurz gesagt, weil SOAP so konzipiert wurde, dass es selbsterklärend ist: Ein SOAP-Endpunkt enthält normalerweise eine WSDL, die beschreibt, welche Vorgänge bereitgestellt werden und wie die Daten (mithilfe eingebetteter XSDs) aussehen, die jeder Vorgang benötigt und / oder zurückgibt.
Aufgrund dieser Selbstbeschreibung kann eine Anwendung wie Visual Studio einen Webservice-Proxy für diese generieren.
Darüber hinaus gibt es mehrere Erweiterungen für SOAP (die WS- * -Spezifikationen), mit denen das Verschlüsselungs- oder Transaktionsverhalten mit SOAP verwendet werden kann. Die Idee ist, dass Sie SOAP als zentrale Anlaufstelle für die Erstellung von Webservices für Unternehmen verwenden können.
Auf der anderen Seite...
WebAPI wurde entwickelt, um REST-Services bereitzustellen. Das Kommunikationsformat für REST ist normalerweise JSON oder reines XML - obwohl es eigentlich egal ist, kann es sich auch um reinen Text handeln. REST-Services folgen einer völlig anderen Philosophie: Sie sollen leichtgewichtig sein, sodass sie problemlos von clientseitigen Skripten als Teil einer AJAX-Lösung oder von Mobilgeräten verwendet werden können.
Daher ist es notwendig, das Niveau der Zeremonie auf ein Minimum zu beschränken, einschließlich der Selbstbeschreibungskraft. Auch wenn Sie möchten, haben die meisten Kommunikationsformate, die in REST-Diensten verwendet werden (z. B. JSON), ohnehin keine formale Beschreibung ihres Inhalts.
Zusammenfassend kann man sagen, dass SOAP-Webservices normalerweise zur Integration (möglicherweise unterschiedlicher) Lösungen verwendet werden, wohingegen REST-Services besser für die Kommunikation zwischen Teilen derselben Lösung geeignet sind.
quelle
SOAP / WS- * - und RESTful-APIs sind nicht identisch. Wenn Sie SOAP / WS- * WSDL-unterstützende APIs erstellen möchten, ist WCF das Werkzeug der Wahl im Microsoft-Stack, das mit einer HTTP-Bindungsoption bereitgestellt wird (es gibt XML- und JSON-Bindungsoptionen, wobei XML die WSDL-unterstützende Option ist).
In der Praxis war es problematisch, eine WSDL aus einer anderen Implementierungssprache oder -plattform zu verwenden. WS- * -Sicherheitsschichten übertreffen dies umso mehr.
Meine eigenen Erfahrungen mit .Net, Node, Java und PHP habe ich in dieser Hinsicht gemacht, und ich kann sagen, wenn Sie Plattformen haben, bei denen die Details eines untergeordneten Typs nicht definiert werden müssen oder "Object" als "Object" verwendet wird Definition wird es gelinde gesagt problematisch. Darüber hinaus versteht zum größten Teil niemand wirklich, dass SOAP / WS- * stark von Werkzeugen abhängig ist, damit es funktioniert. Dieses Werkzeug ist sehr aufwändig, und verschiedene Systeme arbeiten unterschiedlich.
Dies sind einige der Gründe, warum Leute nach einfacheren Implementierungen suchten. REST-Services (ala Web API) bieten Endpunkte rund um Objekte / Status. Die Idee ist, dass es einfacher ist, eine Reihe von einfacheren Objektstrukturen zu definieren, die im JSON-Format dargestellt werden, und die Endpunkte, die für diese Strukturen verwendet werden sollen, als WSDL aus einer fremden Umgebung zu verwenden, die nicht funktioniert. Versuchen Sie dann, sich in und zu vertiefen das Problem umgehen.
Ironischerweise ist dies einer der Bereiche , die ich Knoten in einem verwendet haben viel als Übersetzungsdienst, einfach weil es flexibel genug , um schmutzige Implementierungen als Client zu akzeptieren , und ich konnte einfach Kunden gegen meine angepasst Nutzlast schreiben , die besser funktioniert. EX: C # ruft JSON-Text ab, den ich mithilfe von JSON.Net in eine von mir definierte Objektdarstellung konvertiere, wenn ich keinen WSDL-Import verwenden konnte.
In der Praxis passiert das oft.
quelle
Viele der Antworten hier sind großartig, aber ich denke, die Antwort ist VIEL einfacher: Sie suchen nach der falschen Technologie für den Job.
Wenn Sie einen SOAP-Service aufbauen möchten, sollten Sie sich wirklich an WCF halten. Es ist immer noch ein sehr leistungsfähiges Framework, Microsoft entwickelt es immer noch aktiv. Es wurden keine Ankündigungen gemacht, damit wir glauben, dass es irgendwohin in der Zukunft gehen wird. Die Web-API ersetzt WCF in keiner Weise (obwohl sie wahrscheinlich trendiger als WCF ist).
Früher war die Web-API Teil von WCF, wurde jedoch in die ASP.NET-Familie verschoben, da sie nicht wirklich zu den anderen WCF-Technologien passte. Die Web-API befasst sich viel mehr mit der Verwendung von HTTP als Anwendungsprotokoll als mit einem Übertragungsprotokoll. In der Web-API sind die HTTP-Verben König, in der WCF dient HTTP lediglich zur Aktivierung des SOAP-Protokolls.
Geben Sie der Web-API nicht die Schuld, dass sie bestimmte Dinge nicht ausführen kann, für die sie nicht gemacht wurde.
quelle