Ha senso che User-Agent sia richiesto per le API REST?

2

Una società (che chiamerò Company NNN da qui avanti), ha un'API REST. Nella mia azienda, utilizziamo l'API REST di Company NNN per fornire alcuni contenuti ai nostri utenti finali.

Se invio la richiesta con il campo dell'intestazione User-Agent compilato, l'API REST restituisce dati JSON validi. Se invio la richiesta senza il campo dell'intestazione User-Agent compilato, l'API REST restituisce 500 Internal Server Error. Dopo aver informato la società NNN di ciò, la loro risposta a me è stata che la specificazione di un agente utente è la migliore pratica.

Questa API non dovrebbe essere in grado di restituire JSON valido anche senza un'intestazione di richiesta User-Agent?

    
posta an12 15.08.2017 - 02:28
fonte

3 risposte

11

REST non è una specifica quindi non ci sono regole rigide per l'API REST. La società NNN è autorizzata a prendere le decisioni che desidera durante la progettazione dell'API REST. Non è un difetto se intenzionalmente vogliono imporre ai client di specificare un agente utente.

Penso che sia una buona idea riportarlo perché è un po 'insolito per un'API REST applicare un agente utente perché l'API REST viene utilizzata da client programmatici che di solito non impostano un agente utente per impostazione predefinita.

In secondo luogo 500 è lo stato errato per un errore di questo tipo. Probabilmente significa che è un bug nel loro sistema. Se fosse intenzionale specificare l'agente utente, mi aspetterei una risposta 400 Bad Request con un messaggio significativo.

L'agente utente potrebbe essere utile per monitorare l'origine delle richieste non autenticate e raggrupparle in modo significativo, ma il fatto che restituiscano un errore interno di 500 server (e presumo che non vi siano messaggi utili) mi dà l'impressione che questo è in realtà un bug. La loro risposta è classica, "non è un bug è una caratteristica".

    
risposta data 15.08.2017 - 03:35
fonte
5

Indipendentemente dal fatto che sia REST, è ancora HTTP e soggetto alle specifiche HTTP.

Per RFC 7231 :

A user agent SHOULD send a User-Agent field in each request unless specifically configured not to do so.

Ora chiedi che cosa DEVE significare ?

SHOULD This word, or the adjective "RECOMMENDED", mean that there may exist valid reasons in particular circumstances to ignore a particular item, but the full implications must be understood and carefully weighed before choosing a different course.

Quindi è raccomandato ("best practice", per NNN) e, a meno che tu non abbia attentamente valutato le alternative, dovresti fare ogni sforzo per includerlo.

    
risposta data 15.08.2017 - 03:48
fonte
0

Tutte le librerie che ho visto impostano la stringa User-Agent, solitamente con la loro definizione. I soliti casi per una stringa User-Agent mancante sono una sessione telnet o un bot. I crawler hanno una convenzione per il loro User-Agent in modo da poterli identificare facilmente. Conoscere l'interprete può essere molto utile nel debug dei casi limite in cui alcuni client falliscono e altri riescono.

Anche se potrebbe essere possibile comunicare senza l'User-Agent è anormale. Non vedo un problema particolare con il fallimento quando manca. Utilizzare gli strumenti di test appropriati e l'Agente utente verrà impostato.

Potresti usare una semplice intestazione user-agent come User-Agent: telnet . Ciò dovrebbe rendere più facile trovare i test nel registro di accesso.

    
risposta data 15.08.2017 - 02:56
fonte

Leggi altre domande sui tag