Devo essere permissivo dei parametri sconosciuti?

9

Sto progettando un'API RESTful e ho affrontato il problema del titolo, riformulato per chiarezza:

Devo fallire velocemente se un client invia un parametro non riconosciuto? Ad esempio,

http://example.com/api/foo?bar=true&paula=bean

In quanto sopra, bar è un parametro valido ma paula non è specificato dall'API. Dovrei

  • Avvisa il client dell'errore
  • Errore veloce
  • Ignoralo

Se avviso il client, posso solo inviare un avviso per il primo parametro, dal momento che potrebbero inviare un numero quasi infinito di essi e il server presumibilmente ha cose migliori da fare. Allo stesso modo, quando fallisce, si specifica solo il primo parametro non valido come problema.

Preferisco il fallimento rispetto all'emissione di un avvertimento per costringere il programmatore ad agire, in quanto altrimenti potrebbero ignorare il problema e continuare a sprecare risorse, o finire per incappare inavvertitamente su se stessi. Non fare nulla è ancora peggio sotto questo aspetto.

Le mie argomentazioni hanno senso? C'è una pratica accettata su queste cose?

    
posta rath 01.03.2016 - 12:37
fonte

2 risposte

9

Secondo me, dovresti restituire uno stato di Richiesta non valida, in modo che il client sappia che ciò che sta tentando di fare non è valido. La mia opinione su questo è influenzata dal concetto che le API RESTful sono individuabili . Se si forniscono informazioni sufficienti in anticipo, il client non tenta mai di fare una richiesta non valida per iniziare. Se lo fa, allora c'è qualcosa di sbagliato nel codice client e fallendo velocemente avvertirai il secondo a questo bug. Naturalmente, questo è un approccio molto purista e potrebbe non essere raccomandato se la tua API non è rilevabile.

Un approccio più pragmatico potrebbe essere quello di ignorare i parametri non validi, ma in ogni caso, assicurati di documentare bene il comportamento.

    
risposta data 01.03.2016 - 13:29
fonte
0

Se esegui API pubbliche (o API che verranno utilizzate da altri team), ti consiglio di restituire l'errore come suggerito da @RubberDuck.

Se la tua API verrà consumata solo all'interno del tuo team (o solo da te stesso), forse è più facile ignorare i campi aggiuntivi (ad esempio richiede meno codice e più facile da fare).

    
risposta data 16.11.2016 - 14:46
fonte

Leggi altre domande sui tag