Spring consuma REST interno WS per MVC

0

Scusa in anticipo se questo è un po 'di confusione, è difficile come esprimerlo.

Attualmente sto usando Spring MVC con alcuni servizi RESTful mescolati per qualche logica lato client AJAX. Sto cercando di passare a uno stile più SOA per codificare le nostre opinioni. Dato che MVC e il servizio REST potrebbero vivere nella stessa applicazione, è necessario utilizzare Spring RestTemplate nel codice quando è necessario popolare gli oggetti in Model ?

In questo momento GET User e display nella vista, Spring MVC parla con un DAO e quindi aggiunge User in Model. Dopo aver letto alcune cose qui su SO e Spring's Site sembra che RestTemplate possa essere usato per ottenere i dati da un servizio REST e quindi inserire nel modello (se proviene da una terza parte).

C'è qualche motivo per cui il codice dovrebbe (o non dovrebbe) passare all'utilizzo di RestTemplate per le chiamate interne di REST invece di utilizzare solo il DOA e così via? Presumo che andare verso SOA significa entrare in questo stile, ma sembra un po 'goffo per chiamare un servizio che si trova all'interno della stessa applicazione. Ma vedo anche il valore aggiunto di avere il servizio esistente una volta e utilizzarlo più volte, aggiornandolo in un punto invece che in tutto, in modo che qualsiasi codice Web front-end venga automaticamente aggiornato con eventuali modifiche al livello di servizio.

Esempio:

@RequestMapping(value={"showUserTable"},method={RequestMethod.GET})
public String showUserTable(Model model){
  List<User> users = User.getAll(); //DAO nonsense here, assume List exists
  model.addAttribute("users", users);
  return "userTable"; // returns a jsp simply looping through the list and displaying.
}

C'è qualche motivo per andare a complicare questi per usare il servizio REST interno a favore dell'incapsulamento che guadagno di SOA, o c'è un modo più pulito per consumare questi servizi?

@RequestMapping(value={"showUserTable"},method={RequestMethod.GET})
public String showUserTable(Model model){
  List<User> users = restTemplate.getForObject("http://example.com/users", User.class);  // or however I use restTemplates, havent done it yet so still fuzzy but shouldnt be too tricky.    

  model.addAttribute("users", users);
  return "userTable"; // returns a jsp simply looping through the list and displaying.
}
    
posta Walls 15.02.2016 - 19:29
fonte

1 risposta

2

Stai utilizzando Spring MVC e il resto del servizio è nella stessa applicazione, non è necessario effettuare una chiamata di riposo per ottenere questi dati.

Ma se vuoi separare il livello di servizio (creando un'API di riposo) e il livello di visualizzazione (Spring MVC) in 2 applicazioni (moduli), in questo caso è necessario. È una buona pratica, puoi esporre la tua API per diversi client e applicazioni mobili native, leggi di più qui:

link

    
risposta data 15.02.2016 - 21:25
fonte

Leggi altre domande sui tag