Frage

Wie strukturieren Sie beim Codieren von Webdiensten Ihre Rückgabewerte?Wie gehen Sie mit Fehlerbedingungen um (erwartete und unerwartete)?Wenn Sie etwas Einfaches wie ein int zurückgeben, geben Sie es dann einfach zurück oder betten Sie es in ein komplexeres Objekt ein?Geben alle Webmethoden innerhalb eines Dienstes eine Instanz einer einzelnen Klasse zurück, oder erstellen Sie für jede Methode eine benutzerdefinierte Rückgabewertklasse?

War es hilfreich?

Lösung

Mir gefällt das Request/Response-Objektmuster, bei dem Sie Ihre Argumente in einer einzigen [Operation]Request-Klasse kapseln, die über einfache öffentliche Eigenschaften verfügt.

Etwas wie AddCustomerRequest, das AddCustomerResponse zurückgeben würde.

Die Antwort kann Informationen zum Erfolg/Misserfolg des Vorgangs, etwaige Meldungen, die von der Benutzeroberfläche verwendet werden könnten, möglicherweise beispielsweise die ID des hinzugefügten Kunden enthalten.

Ein weiteres gutes Muster besteht darin, diese alle von einer einfachen IMessage-Schnittstelle abzuleiten, wobei Ihr allgemeiner Endpunkt so etwas wie Process(params IMessage[] messages)... ist.Auf diese Weise können Sie mehrere Vorgänge in derselben Webanforderung übergeben.

Andere Tipps

+1 für Bens Antwort.

Darüber hinaus schlage ich vor, zu berücksichtigen, dass die allgemeine Antwort mehrere Fehler-/Warnungselemente zulässt, damit die Antwort so umfassend und umsetzbar wie möglich ist.(Möchten Sie einen Compiler verwenden, der nach der ersten Fehlermeldung stoppt, oder einen, der Ihnen so viel wie möglich sagt?)

Wenn Sie SOAP-Webdienste verwenden, dann SOAP-Fehler sind die Standardmethode zur Rückgabe von Fehlerdetails, wobei die Fehlermeldungen beliebige zusätzliche Details zurückgeben können.

Soap-Fehler sind eine Standardpraxis, wenn die aufrufende Anwendung ein Soap-Client ist.Es gibt Fälle, beispielsweise bei einem COM-Client, der XMLHTTP verwendet, in denen die Soap als XML analysiert wird und Soap-Fehler nicht einfach behandelt werden können.Ich kann noch nicht abstimmen, aber noch eine +1 für @Ben Scheirman.

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