Chiave API: contenuto o intestazione


14

Lavorare su un'API al momento e volevo solo raccogliere opinioni su dove dovrebbe essere il posto migliore per trasmettere la chiave API. So che non dovrebbe andare nell'URL, questo lascia l'intestazione della richiesta o il corpo del messaggio.

Se lo inserisco nell'intestazione, posso trovare un metodo generico per estrarlo che può essere utilizzato in tutti i servizi, tuttavia le specifiche che mi sono state consegnate lo vogliono nel corpo (cioè in una stringa JSON inclusa come parte di l'oggetto serializzato nel corpo POST).


Si noti inoltre che non tutti i tipi di richiesta devono avere un corpo e se si desidera convalidare una richiesta senza un corpo, la chiave dovrà trovarsi nell'intestazione.
Whymarrh,

Risposte:


11

In HTTP, c'è Authorizationun'intestazione per quello.

Sebbene sia generalmente utilizzato per fornire le credenziali degli utenti, nel caso di un'API, può contenere l'ID del client e la chiave API corrispondente.

Ci sono diversi vantaggi:

  • Supporto da diversi framework. Molti framework si aspettano Authorizationun'intestazione per eseguire l'autenticazione. Non utilizzarlo forzerà a scrivere codice aggiuntivo per alimentare quei framework con valori personalizzati.

  • Supporto da diversi strumenti. Ad esempio CURL.

  • Meno "WTF, dove trovo / inserisco questa chiave API ?!" da parte di nuovi sviluppatori che si uniscono al team (o sviluppatori che progettano nuovi client per la tua API).

  • È quindi possibile utilizzare definizioni di codici di stato HTTP come 401 Unauthorized, per le quali :

    La risposta DEVE includere un campo di intestazione WWW-Authenticate [...] Il client PUO 'ripetere la richiesta con un campo di intestazione Autorizzazione adeguato.

Spostarlo nel corpo della richiesta può diventare rapidamente doloroso. La maggior parte dei framework e degli strumenti non rende molto semplice l'aggiunta di un corpo a una richiesta, il che potrebbe rendere l'API più difficile di quanto debba essere.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.