Chave da API - conteúdo ou cabeçalho

14

No momento, trabalhava em uma API e queria apenas reunir opiniões sobre onde deveria estar o melhor lugar para transmitir a chave da API. Eu sei que não deve ir no URL, isso deixa o cabeçalho da solicitação ou o corpo da mensagem.

Se eu colocá-lo no cabeçalho, posso criar um método genérico para retirá-lo que possa ser usado em todos os serviços, no entanto, as especificações que me foram entregues o desejam no corpo (por exemplo, em uma string JSON incluída como parte de o objeto serializado no corpo do POST).

garryp
fonte
Observe também que nem todos os tipos de solicitação devem ter um corpo e, se você deseja validar uma solicitação sem um corpo, a chave precisará estar no cabeçalho.
Whymarrh 29/05

Respostas:

11

No HTTP, existe um Authorizationcabeçalho para isso.

Embora geralmente seja usado para fornecer credenciais dos usuários, no caso de uma API, ele pode conter o ID do cliente e a chave da API correspondente.

Existem vários benefícios:

  • Suporte de diferentes estruturas. Muitas estruturas esperam Authorizationcabeçalho para fazer autenticação. O não uso forçará a gravação de código adicional para alimentar essas estruturas com valores personalizados.

  • Suporte de diferentes ferramentas. Por exemplo, CURL.

  • Menos “WTF onde eu encontro / coloco essa chave de API ?!” de novos desenvolvedores que se juntam à equipe (ou desenvolvedores que projetam novos clientes para sua API).

  • Você pode usar definições de código de status HTTP, como 401 Unauthorized, para as quais :

    A resposta DEVE incluir um campo de cabeçalho WWW-Authenticate [...] O cliente PODE repetir o pedido com um campo de cabeçalho de Autorização adequado.

Movê-lo para o corpo da solicitação pode se tornar rapidamente doloroso. A maioria das estruturas e ferramentas não torna muito simples adicionar um corpo a uma solicitação, o que pode tornar sua API mais difícil do que precisa.

Arseni Mourzenko
fonte