Progettazione dell'API REST con oggetti grandi (dettagliati) e piccoli

2

Siamo di fronte al problema che spesso abbiamo classi con molte proprietà. Ma non abbiamo bisogno di loro per la maggior parte delle chiamate API. Quindi finiamo per avere più versioni per fondamentalmente lo stesso oggetto di business.

es.

public class SmallCountry
{
    string Code { get; set; }
    string Name { get; set; }
}

e

public class Country
{
    string Code { get; set; }
    string Name { get; set; }

    string Iso3166_2 { get; set; }
    string Iso3166Alpha2 { get; set; }
    string Iso3166Alpha3 { get; set; }
    long Iso3166Numeric { get; set; }   
}

Abbiamo discusso diverse opzioni con interfacce, proprietà, serializzatori speciali, classi dinamiche, ecc. Ma nulla ci ha davvero convinto. Sono sicuro che non siamo gli unici con questo problema.

Le classi possono essere molto più grandi e talvolta abbiamo liste con centinaia di esse. Quindi penso che farà la differenza per le chiamate API REST.

Utilizziamo C # con un'API Web MVC.

    
posta Remy 28.07.2016 - 15:37
fonte

2 risposte

1

Usa composizione.

Prendendo il tuo esempio, potresti definire due piccoli tipi:

public class SmallCountry
{
    string Code { get; set; }
    string Name { get; set; }
}

e

public class IsoCountry
{
    string Iso3166_2 { get; set; }
    string Iso3166Alpha2 { get; set; }
    string Iso3166Alpha3 { get; set; }
    long Iso3166Numeric { get; set; }   
}

E poi componi le classi più complesse da quelle, ad es .:

public class Country
{
    SmallCountry SmallCountry { get; set; }
    IsoCountry IsoCountry { get; set; }
}
    
risposta data 28.07.2016 - 15:42
fonte
1

Probabilmente puoi usare l'ereditarietà per ottenere questo, ad esempio puoi avere una classe come

public class Country
{
    string Code { get; set; }
    string Name { get; set; }
}

E poi puoi creare un'altra classe, diciamo IsoCountry che eredita il Paese come sotto

public class IsoCountry : Country
{
    string Iso3166_2 { get; set; }
    string Iso3166Alpha2 { get; set; }
    string Iso3166Alpha3 { get; set; }
    long Iso3166Numeric { get; set; }
}
    
risposta data 08.08.2016 - 14:05
fonte

Leggi altre domande sui tag