Consumare un'API di riposo che esponga oggetti nidificati

1

Ho una serie di oggetti nidificati, esposti su un'API REST, in questo modo:

class Categories
{
      int id;
      string name;
      List<Subcategories> subcategories;
}

class Subcategories
{
      int id;
      string name;
      List<Products> products;
}

class Products
{
     int id;
     string name;
     List<Models> models;
}

È possibile accedere a questi oggetti tramite un'API REST con i seguenti punti finali

// get a list of categories
GET /categories 

// get a category                                   
GET /categories/:id

// Get subcategories for a product
GET /categories/:categoryId/subcategories

// Get a subcategory
GET //categories/:categoryId/:subcategoryId


//Get products under a subcategory
GET /categories/:categoryId/:subcategoryId/products

//Get a product
/categories/:categoryId/:subcategoryId/:productId

//Get models
/categories/:categoryId/:subcategoryId/:productId/models


Get a model under a product
/categories/:categoryId/:subcategoryId/:productId/:modelId

Quale modello di progettazione devo utilizzare per progettare un livello di accesso ai dati sul lato client? Si noti che il mio client legge solo questi oggetti, non scrive loro. DAO? Repository? Sono un po 'confuso tra i due, non sono sicuro di cosa sarebbe applicabile qui.

    
posta ashwnacharya 19.02.2015 - 07:20
fonte

1 risposta

1

Perché li vuoi annidati nel tuo livello di accesso? Quell'API espone gli oggetti semplici, non gli alberi come posso vedere.

Quindi, puoi creare l'API interna che ne imita quella.

class Category {
    public static Category[] getList();
    public static Category getById($id);
    public static Subcategory[] getSubcategories($id);
    public void fetchDetails();
}

class Subcategory{
    public static Subcategory getById($id);
    public static Product[] getProducts($id);
    public void fetchDetails();
}

Ho dichiarato alcuni metodi statici, ma solo per chiarezza. Nella maggior parte dei casi, il metodo statico sulle classi può risultare difficile da testare.

In questo esempio gli oggetti creati sono vuoti per impostazione predefinita. Il metodo fetchDetails() li riempie usando l'API REST. Si tratta di saltare una richiesta API quando si desidera recuperare solo i figli di un genitore specifico senza prima recuperare l'intero genitore.

Bene, come ho detto, è solo un esempio. Senza i requisiti specifici dei consumatori di API è difficile suggerire qualcosa di veramente utile;) E i requisiti tendono a cambiare;)))

    
risposta data 19.02.2015 - 11:41
fonte

Leggi altre domande sui tag