Clave API: contenido o encabezado

14

Trabajando en una API en este momento y solo quería reunir opiniones sobre dónde debería estar el mejor lugar para transmitir la clave API. Sé que no debe ir en la URL, esto deja el encabezado de la solicitud o el cuerpo del mensaje.

Si lo pongo en el encabezado, puedo encontrar un método genérico para extraerlo que se puede usar en todos los servicios, sin embargo, la especificación que me entregaron lo quiere en el cuerpo (es decir, en una cadena JSON incluida como parte de el objeto serializado en el cuerpo POST).

Garryp
fuente
Tenga en cuenta también que no todos los tipos de solicitud deben tener un cuerpo y, si desea validar una solicitud sin un cuerpo, la clave deberá estar en el encabezado.
Whymarrh

Respuestas:

11

En HTTP, hay un Authorizationencabezado para eso.

Si bien generalmente se usa para proporcionar las credenciales de los usuarios, en el caso de una API, puede contener la ID del cliente y la clave API correspondiente.

Hay varios beneficios:

  • Soporte de diferentes marcos. Muchos marcos esperarán Authorizationencabezado para realizar la autenticación. No usarlo obligará a escribir código adicional para alimentar esos marcos con valores personalizados.

  • Soporte de diferentes herramientas. Por ejemplo CURL.

  • Menos "WTF, ¿dónde encuentro / pongo esta clave API?" De nuevos desarrolladores que se unen al equipo (o desarrolladores que diseñan nuevos clientes para su API).

  • Luego puede usar definiciones de código de estado HTTP como 401 Unauthorized, para las cuales :

    La respuesta DEBE incluir un campo de encabezado WWW-Authenticate [...] El cliente PUEDE repetir la solicitud con un campo de encabezado de autorización adecuado.

Moverlo al cuerpo de la solicitud puede volverse rápidamente doloroso. La mayoría de los marcos y herramientas no hacen que sea muy sencillo agregar un cuerpo a una solicitud, lo que puede hacer que su API sea más difícil de lo necesario.

Arseni Mourzenko
fuente