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.