Architettura di classe C # per servizi REST

0

Mi sto integrando con una serie di servizi REST esposti dal nostro partner. L'unità di integrazione è a livello di progetto, il che significa che per ogni progetto creato sul lato del recinto dei nostri partner esporrà un insieme unico di servizi REST.

Per essere più chiari, supponiamo che ci siano due progetti: project1 e project2. I servizi REST disponibili per accedere ai dati del progetto sarebbero quindi:
/ Project1 / ricerca / getstuff? Ecc ...
/ Project1 / analisi / getstuff? Ecc ...
/ project1 / cluster / getstuff? etc ...

/ project2 / ricerca / getstuff? Ecc ...
/ Progetto2 / analisi / getstuff? Ecc ...
/ project2 / cluster / getstuff? etc ...

Il mio compito è quello di avvolgere questi servizi in una classe C # che verrà utilizzata dal nostro sviluppatore di app.

Voglio renderlo semplice per lo sviluppatore dell'app e sto pensando di fornire qualcosa come la seguente classe.

class ProjectClient  
{  
  SearchClient _searchclient;  
  AnalysisClient _analysisclient;  
  ClusterClient _clusterclient;  

  string Project {get; set;}  
  ProjectClient(string _project)  
  {  
    Project = _project;  
  }  
}

SearchClient, AnalysisClient e ClusterClient sono le mie classi per supportare i rispettivi servizi mostrati sopra.

Il problema con questo approccio è che ProjectClient dovrà fornire metodi pubblici per ciascuna delle API esposte da SearchClient, ecc ...

public void SearchGetStuff()
{
  _searchclient.getStuff();
}

Qualche suggerimento su come posso architettarlo meglio?

    
posta user15370 02.02.2011 - 17:26
fonte

2 risposte

2

Perché non renderlo semplice per te - sia per quanto riguarda le decisioni che per l'implementazione - e basta usare uno dei tanti framework esistenti per consumare le API Web, come RestSharp o Hammock .

    
risposta data 02.02.2011 - 21:09
fonte
0

un'interfaccia per ogni progetto REST, una classe per interfaccia, con una fabbrica statica

in altre parole, la classe ProjectClient come presentata viola il principio della responsabilità unica (e si comporta come una classe "dio"). Suggerisco:

public static class ProjectClientFactory
{  
    public static ISearchClient MakeSearchClient(string projectUrl) { ... }
    public static IAnalysisClient MakeAnalysisClient(string projectUrl) { ... }
    public static IClusterClient MakeClusterClient(string projectUrl) { ... }
}
    
risposta data 02.02.2011 - 20:19
fonte

Leggi altre domande sui tag