2014-04-25 6 views
5

KURZBESCHREIBUNG: Ich bin auf der Suche nach Tutorial oder einem Github-Projekt, das ein Beispiel für RESTful Service Design "Best Practices" hat.Spring RESTful Best Practice - Beispiel/Tutorial benötigt

lange Geschichte: Ich werde durch die „offiziellen“ Spring-Tutorial für die Gestaltung und Umsetzung von Web-Service: http://spring.io/guides/tutorials/rest

Es ein Beispiel für ein kleines Projekt hat. Sie verwenden "hexagonale Architektur" und eine Reihe von "Ereignis" -Klassen für dieses Projekt. Wenn ich es durchlaufe, kann ich nicht anders, als zu bemerken, dass es für ein Beispielprojekt viel zu kompliziert erscheint. Es gibt über 50 Klassen, die Tests nicht mitgezählt. Ist das wirklich das "Best Practice" Beispiel für einen solchen Service? Wenn nicht, gibt es noch andere Beispiele, die besser sind?

+0

Fragen Sie uns nicht, um Anleitungen für Sie zu finden. Verwenden Sie Google, Yahoo oder Bing, um das zu tun. –

+2

Ich habe eine umfangreiche Suche durchgeführt. Das Problem ist herauszufinden, welche gute Beispiele sind und welche nicht. Wenn mir das offizielle Tutorial fraglich erscheint, muss ich fragen, ob ich hier nur verrückt bin oder nicht. Gesundheitsüberprüfung. – Turar

+0

Ich denke, das Tutorial, das Sie verlinkt haben, geht einfach ins Detail, worum es bei einem REST geht. In jedem Fall ist dies eine Art (wenn nicht vollständig) off-topic. –

Antwort

24

Ich kann Sie nicht auf ein Tutorial verweisen, kann aber einige Dinge erwähnen, die auf der Erfahrung beim Schreiben von RESTful-Services mit Spring MVC basieren.

  1. Teilen Sie die Controller von der Geschäftslogik. Bedenken in den Controllern: vor allem Fehlerbehandlung, auch potentielle Autorisierung. Die Controller-Methoden sind möglicherweise anfangs recht dünn und werden nur an entsprechende Geschäftslogikmethoden gesendet. Das ist keine schlechte Sache, bald werden Ihre Controller mit Problemen bei der Anbindung von Clients wachsen.

  2. Wenn wir von der Fehlerbehandlung sprechen, ist es ziemlich schwierig, es in einem RESTful-Service richtig zu machen. Sie müssen auf jeden Fall eine Möglichkeit haben, die Kunden über strukturierte Daten auf Fehler aufmerksam zu machen. Das sollte ein Teil all Ihrer Antworten sein, denke ich. Sie müssen entscheiden, über welche Fehler Sie Informationen zurücksenden, über die Sie nichts sagen und nur protokollieren usw.

  3. höchstwahrscheinlich haben Sie einige Datenobjekte für die Anfragen, die Sie bekommen, und die Antworten, die Sie sind Senden. Verpacken Sie sie in einem separaten Glas. Fügen Sie diesen JAR-Schnittstellen, die von Ihren Controllern implementiert werden, hinzu. Fügen Sie auch eine einfache zweite Implementierung dieser Schnittstellen hinzu, die Aufrufe an Ihren Dienst ausführt. Hier, du hast eine Client-Bibliothek. Verteilen Sie es, machen Sie Ihre Java-Clients glücklich.

  4. Obwohl Sie jetzt eine nette Java-Client-Bibliothek haben, vergessen Sie nicht, auch Ihren Dienst mit curl zu testen und zu dokumentieren, wie Sie ihn mit einfachen Aufrufen auf diese Weise verwenden können. Machen Sie Ihre Nicht-Java-Benutzer glücklich.

  5. Es gibt alle Arten von Bibliotheken für "Unit" -Testcontroller, indem man mehr oder weniger über die Interna eines Webservers spottet. Diese sind sehr nützlich, aber beschränken Sie sich nicht auf sie. Verfügen Sie über eine Qa-Umgebung, in der Sie Ihren Service vollständig bereitstellen und über eine Qa-App verfügen, die echte vollständige Anfragen an die Instanz Ihres Service auf der Qa-Umgebung sendet und deren Antworten analysiert.

  6. Versuchen Sie, die Dinge über die verschiedenen Anrufe hinweg einfach und konsistent zu halten. Zum Beispiel kann jede Antwort den gleichen "Fehler" -Teil mit den gleichen Feldern enthalten, die Informationen in einer strukturierten, programmatisch verwendbaren Form darüber geben, was falsch gelaufen ist.

  7. REST ist eine nette Abstraktion, hat aber seine Grenzen: In der Praxis kann /delete.json?id=3 sehr unterschiedliche Auswirkungen auf verschiedene Dienste haben. Erwarten Sie nicht, dass Ihre Kunden erraten können, was "hinzufügen" und "löschen" in Ihrem speziellen Fall bedeutet, da sie wahrscheinlich anders raten als erwartet. Geben Sie stattdessen in Ihrer Dokumentation einige Informationen darüber an, was Ihr Dienst unter der Haube tun wird. Wir sind noch nicht in der Lage, Komponenten zu haben, die über das Wissen nur einer sehr dünnen Schnittstelle kommunizieren, und leider von ihren Interna nichts ahnend.

+0

Danke, das war sehr hilfreich! – Turar