2015-04-22 9 views
9

Ich versuche, eine erholsame Stil-API zu erstellen, mit springMVC.SpringMVC - Dispatcher Servler URL-Muster-Stil

Bei der Konfiguration der URL-Muster für springMVC DispatcherServlet, scheint es 2 Wahl haben, und ich brauche einen Rat.

Wahl A:
Konfigurationsmuster als: <url-pattern>*.action</url-pattern>
und Aktions Verwendung Pfad so @RequestMapping("/role/add.action")

Wahl B:
Konfigurationsmuster als: <url-pattern>/api/*</url-pattern>
und Aktions Verwendung Pfad wie @RequestMapping("/api/role/add")

Ich bevorzuge einen Stil, der kein Suffix hat, aber in diesem Fall muss ich ein tun dd ein Unterpfad.

Aber ich bin mir nicht sicher, welche in einem Projekt, das als Backend dienen soll, um eine erholsame API zu bieten, mit Browser/IOS/Android als sein Client richtiger ist.


Es könnte eine Wahl C sein, aber ich bin mir nicht sicher:

Konfigurationsmuster wie: <url-pattern>/*</url-pattern>
und Aktion Verwendung Pfad wie @RequestMapping("/role/add")

In diesem Fall Einbau- Servlet wird überschrieben, zB jsp wird nicht normal funktionieren.
Aber ich habe keine jsp, und auch, statische Ressource wie html/js/css/image/document/music/video sind alle auf einen anderen Port oder Server von nginx, Anfrage an Tomcat nur AJAX-Dienst über JSON-Daten zur Verfügung gestellt setzen.
Also in diesem Fall ist es richtig, Wahl C zu verwenden, oder es hat einige schlechte Nebenwirkungen?

+1

Ich empfehle mit Spring-Boot, das die Notwendigkeit beseitigt, für irgendeine solche Spezifikation. – chrylis

+0

@chrylis Können Sie helfen, ein wenig darüber zu erklären, wie Spring Boot dies beheben? Weil ich gemäß der Servlet-Spezifikation kein Muster finden kann, das weder Suffix noch Unterpfad hat, während das Vermeiden der integrierten Servlets vermieden werden könnte. –

+0

Spring Boot verwaltet den gesamten Container für Sie, sodass Sie keine Pfade angeben müssen. – chrylis

Antwort

3

wenn Ihr Ziel erholsamen api ist meine Wahl der zweite ist, da Sie die Ressource in der URL zu identifizieren; (Kann die api dies nicht erlauben)

@RequestMapping("/api/role/{roleId}" method = RequestMethod.PUT) 

zu aktualisieren eine vorhandene Rolle

@RequestMapping("/api/role" method = RequestMethod.POST) 

einfügen eine neue Rolle: Sie sagen eine Rolle Ressource verwalten müssen Sie einige Mapping wie diese hier haben sollte

@RequestMapping("/api/role/{roleId}" method = RequestMethod.DELETE) 

eine Rolle

@RequestMapping("/api/role" method = RequestMethod.GET) 
löschen

zum Abrufen von Rollen (Sie können einige Filter über Abfragezeichenfolge implementieren)

Dasselbe gilt für andere Ressourcen (Benutzer usw.) Das Namensschema ist das gleiche.

vould I Option C vermeiden, da ich denke, dass es am besten ist, eine spezielle Zuordnung für die api hat, wenn Sie auch ein Web-Schnittstelle Schiff-App, die nicht die api nicht verwendet

3

ich mit dem Wahl B für RESTful Dienste gehen, betrachten CRUD Operationen REST verwenden. Und Sie können die url-pattern als Karte,

config pattern as: <url-pattern>/api/*</url-pattern> 

So fügen Sie ausführen, können Sie nur sicherstellen, dass Sie die JSON-Objekt von der Seite veröffentlichen und haben eine URL wie /api/add

und im Falle löschen, Sie können einfach dem gleichen folgen. Bedenken Sie, dass Sie eine object mit ihrer ID aus der Liste löschen werden.Sie können es einfach als, machen aus

/api/delete/${id}

Und behandeln es wie,

@RequestMapping(value="/{id}", method=RequestMethod.GET) 
+0

Guter Vorschlag, aber viele API hat mehrere Parameter, also muss ich noch Parameter nach '?' Oder in http Körper, denke ich. –

+0

Ja, es hängt auch von der API ab. Warum verwenden Sie die Objekte nicht für mehrere Parameter? –

+0

Ich benutze manchmal Objekt, immer noch das gilt auch nur für einen Teil der API, z. B. ein Suchdienst hat mehr Parameter aus mehreren Modell vielleicht. –