Estoy desarrollando una API para una aplicación en la que estoy trabajando y me he encontrado con una pregunta interesante:
Imagina un punto final de API como este:
GET /customers/123456
que devuelve un solo objeto de cliente. Ahora, en nuestra organización, los clientes pueden pertenecer a organizaciones de ventas. Cada usuario de API está asociado a una organización y quiero restringir el acceso de un usuario a los clientes asociados a su organización.
Entonces, dado un usuario que pertenece a la organización ABC
y al cliente 123456
que pertenece a la organización XYZ
, ¿qué debería devolver mi API cuando este usuario intente obtener ese cliente?
-
404 Not Found
: si un usuario consulta a un cliente inexistente, devuelve un404
ya que no se encontró ningún recurso en esa URL. -
401 Unauthorized
: si consulta un recurso al que no tiene acceso, debería obtener una respuesta "no autorizada".
Me parece que si la API devuelve 401 Unauthorized
o clientes existentes de otras organizaciones y 404 Not Found
para clientes no existentes, mi API está filtrando información. Por ejemplo, un usuario de la organización ABC
podría consultar la API y determinar qué ID de usuario existen y cuáles no.
Notas adicionales:
-
Las ID de clientes se generan de forma secuencial y no hay espacios vacíos, por lo que el tipo de información que se filtraría sería:
- ¿cuál será el próximo ID de cliente?
- ¿cuántos clientes se crearon en un período de tiempo?
-
Las organizaciones de ventas generalmente están restringidas a áreas geográficas particulares y generalmente no están en competencia directa. Pero algunos territorios se superponen y hay reglas vigentes para regir la "caza furtiva" de los clientes de cada uno. En definitiva, es un entorno ligeramente competitivo en el que realmente no queremos que las organizaciones de ventas sepan sobre los clientes de las demás.