Un'API RESTful dovrebbe fornire dati per un intero modulo?

12

Diciamo che ho un'applicazione web JavaScript che utilizza interamente un'API RESTful per i dati.

Supponiamo che questa applicazione abbia un modulo dati e diciamo che sto modificando un record in / product / 12345. Quando creo il modulo, faccio una richiesta RESTful a / product / 12345 e ottengo i dati JSON:

{
  "id": 12345,
  "name": "Some Product",
  "active": true,
  "sales_user_id": 27
}

Quindi, ovviamente il mio modulo potrebbe avere un elenco a discesa per selezionare un addetto alle vendite. Devo compilare questo elenco. Da dove dovrebbero venire i dati? Qual è l'approccio più comune?

Avrebbe senso farlo diventare parte della risposta alla richiesta / product / 12345?

{
  "id": 12345,
  "name": "Some Product",
  "active": true,
  "sales_user_id": 27,
  "sales_users": [
    {"id": 1, "name": "Anna Graham"},
    {"id": 2, "name": "Dick Mussell"},
    {"id": 3, "name": "Ford Parker"},
    {"id": 4, "name": "Ferris Wheeler"},
    {"id": 5, "name": "Jo King"}
  ]
}

E quando crei un nuovo record? La mia API dovrebbe anche rispondere a GET / product / new, con il seguente?

{
  "sales_users": [
    {"id": 1, "name": "Anna Graham"},
    {"id": 2, "name": "Dick Mussell"},
    {"id": 3, "name": "Ford Parker"},
    {"id": 4, "name": "Ferris Wheeler"},
    {"id": 5, "name": "Jo King"}
  ],
  "categories": [
    {"id": 1, "name": "Category 1"},
    {"id": 2, "name": "Category 2"},
    {"id": 3, "name": "Category 3"},
    {"id": 4, "name": "Category 4"},
    {"id": 5, "name": "Category 5"}
  ],
  "etc": [ ... ]
}
    
posta Chad Johnson 27.09.2013 - 19:22
fonte

2 risposte

6

Mi rivolgo a endpoint molto semplici e focalizzati in modo ristretto. Mi aspetterei una richiesta in qualche luogo come / sales_users che restituisce tutti gli utenti delle vendite.

GET / sales_users:

[
    {"id": 1, "name": "Anna Graham"},
    {"id": 2, "name": "Dick Mussell"},
    {"id": 3, "name": "Ford Parker"},
    {"id": 4, "name": "Ferris Wheeler"},
    {"id": 5, "name": "Jo King"}
]

Allo stesso modo, se hai intenzione di avere un elenco di categorie, vorrei aggiungere un endpoint separato per quello.

GET / categories:

[
    {"id": 1, "name": "Category 1"},
    {"id": 2, "name": "Category 2"},
    {"id": 3, "name": "Category 3"},
    {"id": 4, "name": "Category 4"},
    {"id": 5, "name": "Category 5"}
]

Non vorrei creare un GET / prodotto / nuovo. Piuttosto, vorrei creare un modulo nella tua app per gestire l'aggiunta di nuovi prodotti che conoscono le richieste appropriate per popolare i suoi elenchi (ad es., GET / categorie, GET / sales_users, ecc.).

    
risposta data 27.09.2013 - 19:38
fonte
3

Supponendo che l'elenco dei venditori sia relativamente statico, penso che vorrai una chiamata API separata /salesusers che potresti chiamare una volta (sul caricamento del modulo, ecc.) e salvarla in modo da non dover ri-richiedere questi dati ogni volta. Ricorda in REST, stai organizzando la tua API intorno alle risorse, e i venditori sono logicamente separati da risorse dai prodotti.

Allo stesso modo, quando si chiama /product/new , si desidera solo inviare dati per un nuovo prodotto, che potrebbe includere un id sales_user, ma niente di più. Le modifiche a uno stesso sales_user sarebbero chiamate separate.

    
risposta data 27.09.2013 - 19:33
fonte

Leggi altre domande sui tag