Parametri di interrogazione - numerico vs stringa?

1

/users?role=admin , dove admin è probabilmente una specie di slug vs /users?role=2 , dove 2 si riferisce alla nostra chiave primaria della tabella del dizionario dei ruoli interni.

Quale dei due è preferibile?

    
posta Kamil Latosinski 28.10.2017 - 11:58
fonte

3 risposte

4

/users?role=admin, where admin is probably some kind of slug vs /users?role=2, where 2 refers to our internal roles dictionary table primary key.

Which of the two is preferred?

Quale dei due è più probabile che funzioni quando si modifica l'implementazione sul server?

Jim Webber:

URIs do NOT map onto domain objects - that violates encapsulation. Work (ex: issuing commands to the domain model) is a side effect of managing resources. In other words, the resources are part of the anti-corruption layer.

Parte del punto di REST è che il client e il server comunicano tramite messaggi. Le risorse sul server agiscono come un adattatore o livello anti-corruzione, trasformando i messaggi in qualcosa che il modello di dominio comprende.

Cool URI non cambia ; sono accoppiati alla semantica del messaggio piuttosto che all'implementazione.

    
risposta data 28.10.2017 - 14:29
fonte
1

I valori nominati sono più debugabili, il che è un grande vantaggio.

Se il nome del ruolo può essere fornito dall'utente e non è limitato ad alcuni preset, è necessario considerare due problemi:

  • Il nome potrebbe includere dati sensibili per la sicurezza. Questo è problematico se l'URL dovesse essere visibile in altri contesti. A seconda degli errori restituiti, questo potrebbe anche essere utilizzato per verificare l'esistenza di un ruolo specifico.

  • I nomi potrebbero non essere unici. O i nomi hanno uno scope in modo che lo stesso nome possa fare riferimento a ruoli diversi in ambiti diversi, o hai bisogno di un ID numerico.

Se tutti i ruoli sono integrati ma utilizzano ID invece di nomi mnemonici, allora sorge la domanda su come i clienti devono sapere quale ID devono usare.

  • Questo non è un problema se l'API è navigabile esclusivamente tramite collegamenti ipertestuali, ma può essere difficile da implementare.
  • In alternativa, potrebbe essere necessario trasmettere una tabella che associa i ruoli ai loro ID.
  • L'elenco degli ID numerici solo nella documentazione dell'API è soggetto a errori e probabilmente insufficiente.

Se l'API è puramente interna (e i client API possono essere modificati insieme all'API), ciò è meno importante, ma l'utilizzo dell'ID ruolo corretto è ancora una possibile fonte di errori.

    
risposta data 28.10.2017 - 12:29
fonte
1

TLDR: non importa.

Se la tua API è pubblica, dovrai fornire la documentazione che combina gli ID con i nomi. Se la tua API è privata, come hai detto qualcun altro, avrai la possibilità di cambiare il codice del client come preferisci, quindi le modifiche all'API non interromperanno le cose.

Personalmente utilizzerei gli ID a causa delle limitazioni della stringa di query, dell'efficienza della larghezza di banda (minuscola) e della mancanza di necessità di associare il nome all'ID sul server.

I vantaggi del debug che qualcun altro ha citato sono facilmente ottenuti facendo in modo che i gestori degli errori spieghino cosa non funziona mentre si esegue la modalità di debug.

    
risposta data 28.10.2017 - 23:21
fonte

Leggi altre domande sui tag