2015-04-22 12 views
9

Sto cercando di creare un'API di stile riposante, utilizzando springMVC.SpringMVC - stile modello di URL del dispatcher servo

Quando si configura il modello di url per springMVC DispatcherServlet, sembra che ci siano 2 opzioni e ho bisogno di un consiglio.

Scelta A:
modello di configurazione come: <url-pattern>*.action</url-pattern>
e l'uso azione percorso come @RequestMapping("/role/add.action")

Scelta B:
config modello come: <url-pattern>/api/*</url-pattern>
e l'uso azione percorso come @RequestMapping("/api/role/add")

Preferisco usare uno stile che non ha suffisso, ma in quel caso ho bisogno di fare un dd un percorso secondario.

Ma non sono sicuro di quale sia più corretto da utilizzare in un progetto che funge da back-end per fornire API restful, con browser/IOS/Android come client.


ci potrebbe essere un scelta C, ma non sono sicuro:

modello di configurazione come: <url-pattern>/*</url-pattern>
e l'uso azione percorso come @RequestMapping("/role/add")

In questo caso built-in il servlet sarà override, ad esempio jsp non funzionerà normalmente.
Ma non ho alcun jsp, e inoltre, la risorsa statica come html/js/css/image/document/music/video viene messa su un'altra porta o server servito da nginx, richiesta di tomcat solo fornire un servizio jax tramite dati json.
Quindi in questo caso è corretto usare la scelta C, o ha alcuni effetti collaterali negativi?

+1

mi consiglia di utilizzare Primavera Boot, che elimina la necessità di qualsiasi tale specifica – chrylis

+0

@chrylis Puoi aiutare a spiegare un po 'su come l'installazione di Spring Fix risolve questo problema? Perché in base alle specifiche del servlet, non riesco a trovare un modello che non ha né suffisso né sotto-percorso, mentre potrebbe evitare di sovrascrivere i servlet incorporati. –

+0

Spring Boot gestisce l'intero contenitore e quindi non è necessario specificare alcun percorso. – chrylis

risposta

3

se il tuo obiettivo è RESTful API mia scelta è il secondo in quanto a identificare la risorsa nel URL; dici è necessario gestire una risorsa ruolo si dovrebbe avere un po 'di mappatura come questi:

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

per inserire un nuovo ruolo (può essere l'API non consente questo)

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

per aggiornare un ruolo esistente

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

per eliminare un ruolo

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

per recuperare i ruoli (è possibile implementare alcuni filtri tramite stringa di query)

Lo stesso vale per altre risorse (Utente, ecc.) Lo schema di denominazione è lo stesso.

ho vould evitare opzione C rispetto penso che sia meglio avere una mappatura dedicata per l'API se APP anche spedire un'interfaccia web che non utilizza l'API

3

andrò con la Scelta B per i servizi RESTful, considerare l'esecuzione CRUD operazioni utilizzando REST. E si può mappare la url-pattern come,

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

Quindi, per eseguire aggiungere, si può solo fare in modo che si registra l'oggetto JSON dalla pagina ed avere un url del tipo /api/add

E in caso di cancellazione, puoi semplicemente seguire lo stesso. Considera che cancellerai un object dall'elenco usando il suo id.Si può semplicemente fare fuori come,

/api/delete/${id}

e maneggiarlo come,

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

Un buon suggerimento, ma molte API hanno più parametri, quindi ho ancora bisogno di mettere i parametri dopo '?' O nel corpo http, immagino. –

+0

Sì, dipende anche dall'API. perché non usi gli oggetti per più parametri. –

+0

Io uso l'oggetto a volte, ancora che si applica anche solo a parte dell'API, ad esempio, un servizio di ricerca ha forse più parametri da più modelli. –