Progettazione e implementazione dell'API client rest (con RestEasy)

2

Sto lavorando a un progetto per creare un client di riposo generico per la nostra applicazione per l'integrazione attuale e futura con più servizi (diversi sistemi esterni). Di seguito è riportato un diagramma di alto livello

Sto pensando di creare un RestClient per host esterno e di memorizzarlo come valore in una mappa con nome di servizio come chiave e rest client. Di seguito è riportata la mia classe RestClient (che verrà memorizzata nella cache) che include ResteasyWebTarget.

public class RestClient {
    private ResteasyWebTarget target;

    @Singleton
    public class RestClientRepository {
        private final Map<String, RestClient> repository = 
            new ConcurrentHashMap<String, RestClient>() 

La mia implementazione predefinita userà RestEasy. Dato che il mio codice cliente farà parte di una webapp (ambiente multi-cavo). Userò PoolingClientConnectionManager

ClientConnectionManager cm = new PoolingClientConnectionManager();
HttpClient httpClient = new DefaultHttpClient(cm);
ApacheHttpClient4Engine engine = new ApacheHttpClient4Engine(httpClient);
ResteasyClient client = ((ResteasyClientBuilder) ResteasyClientBuilder
  .newBuilder()).httpEngine(engine).build();

C'è una soluzione migliore di questo approccio?

    
posta bornleo 21.08.2015 - 18:14
fonte

1 risposta

2

In primo luogo sembra giusto, ma penso che tu voglia nascondere questi dettagli di implementazione. Chiediti: dov'è la differenza tra un database locale e alcuni server di dati remoti?

Probabilmente vuoi avere un stato per ogni risorsa come User e un negozio come UserStore . Ogni negozio ha alcuni metodi per l'interazione come:

public User getUser(String, String)
public User getUserById(long)
public void updateUser(User) throws ...
public void deleteUser(User)
public void createUser(User)

Nasconde i dettagli di implementazione della tua API REST. E i dettagli del caching locale e così via (se vuoi memorizzare la cache localmente devi sincronizzare i dati e fare la sincronizzazione correttamente è molto difficile da risolvere!)

    
risposta data 21.08.2015 - 19:16
fonte

Leggi altre domande sui tag