Validazione delle risorse REST: campi richiesti in modo condizionale vs. Risorse separate

3

È meglio la progettazione dell'API REST per utilizzare campi condizionalmente obbligatori o per creare risorse diverse in base al valore del campo di controllo? Ecco un esempio:

POST route / automobile

{
"type": "car", //This field controls validation rules
"bedLength": 6, //required if type == "truck"
"trunkVolume": 10 //required if type == "car"
}

o

POST route / automobile / camion

{
"bedLength": 6 //required 
}

POST route / automobile / auto

{
"trunkVolume": 10 //required 
}

Personalmente mi propongo per il secondo progetto in cui i campi sono validati in modo indipendente. Penso che l'API sia più pulita. Ma sto ricevendo alcune discussioni dai colleghi. Mi piacerebbe sentire alcuni pensieri dagli altri. Inoltre, vorrei limitarlo alla discussione sulla progettazione degli endpoint del servizio, indipendentemente dal modo in cui i dati sono rappresentati nel dominio e nei livelli di dati.

    
posta Yuli Bonner 05.06.2018 - 17:24
fonte

2 risposte

2

Non penso che entrambi gli approcci siano intrinsecamente migliori degli altri. Per prendere una decisione ragionevole, personalmente inizierei a guardarlo dal punto di vista dell'utente. Nello specifico: i camion sono diversi dalle auto dal punto di vista dell'utente delle API? Suppongo che stiamo parlando di veicoli passeggeri in entrambi i casi.

Ci sono molte cose simili su camion e auto. Dove si adattano i SUV? Alcuni sono costruiti su telai di automobili, altri su telai di camion. Non tutte le auto hanno bauli. Alcuni hanno una "frunk" oltre a un baule. D'altra parte, ci sono molte differenze su camion e auto. Ad esempio, negli Stati Uniti, i camion sono soggetti a diversi standard di efficienza del carburante.

Un vantaggio nel separarli è che puoi facilmente chiarire le differenze. Il rovescio della medaglia è che se l'utente li tratterà come approssimativamente simili, hai molto complicato le cose per loro. Quindi, se sto usando questa API per cercare veicoli che potrei acquistare come consumatore, probabilmente sono sul mercato sia per un'auto che per un camion, non per entrambi. Ma se sto usando questo come un rivenditore che ha solo bisogno di rifornire il mio lotto, potresti complicare il mio lavoro separandoli.

    
risposta data 05.06.2018 - 21:42
fonte
1

Stai parlando di risorse . Presumo che i tuoi endpoint stiano creando una sorta di record in un database, chiamiamolo car . Se, in entrambi i casi, stiamo parlando della stessa risorsa con attributi diversi, allora vai con un endpoint e documenta correttamente il comportamento.

Se è in contrasto due cose diverse (nel tuo dominio), ad es. un car e un banana due endpoint hanno senso.

    
risposta data 05.06.2018 - 18:55
fonte

Leggi altre domande sui tag