2011-02-10 11 views
5

La mayoría de las API solicitan a los desarrolladores que obtengan una clave de API. La clave API se usa para limitar la velocidad. ¿Qué impide que un desarrollador obtenga varias claves de API como forma de evitar el límite de velocidad?Lo que impide que un desarrollador obtenga varias claves de API

El problema que estoy enfrentando es decidir cómo emitir una clave de API. Lo único que encontré trabajando es emitir más de una "clave de desarrollador".

  • no he encontrado una manera de evaluar realmente limitar el uso de una aplicación (alguien podría obtener varias claves y la secuencia de darles de comer a su aplicación para obtener las tasas más altas de este una aplicación)
  • y no tienen encontrado una manera de mantener la clave de cada aplicación (alguien podría conseguir la llave y utilizarlo en múltiples dominios)

Respuesta

5

una clave de API no es la herramienta adecuada para la limitación de velocidad, especialmente si la API está de vuelta - finalizable Funciona si el código está integrado en el navegador del usuario final, ya que sirve como "terreno neutral" que puede asegurar que la identidad de la aplicación no se falsifique, pero no si se llama desde un servicio o aplicación escrita por los desarrolladores de su cliente. .

El control de utilización de recursos es un problema económico, por lo que requiere una solución económica. Requerir un token único hashcash por llamada es una buena manera de hacer cumplir esto. (Hashcash es un esquema de prueba de trabajo: requiere que la persona que llama compruebe que ha gastado un montón de tiempo de CPU en una tarea sin sentido como una forma de demostrar que la solicitud tiene valor para ellos).

Es también escalable según la carga - si su servicio está siendo abrumado, puede aumentar dinámicamente el "precio" en los bits cero iniciales requeridos en el token; cada aumento en un bit reducirá la tasa de solicitud a la mitad. (Solo asegúrese de que su API pueda comunicar el "precio" de hashcash si es dinámico.)

+0

Me pregunto, ¿cómo podría uno hacer una API que no sea "back-end invocable"? – silow

+0

+1 enlace de hashcash interesante – orangepips

+0

@silow Estoy pensando en algo así como Google Maps, donde la API pública es parte de una aplicación interactiva que se puede insertar y que se ejecuta en el navegador; la API HTTP entre el componente de JavaScript de Google Maps y los servidores de fondo de Google no es pública. –

Cuestiones relacionadas