Cuando uso una API, como cliente tengo que manejar casos de "éxito" diferentes a los casos de "error"; No tengo otra opción allí. Por lo tanto, debe devolver un error en situaciones que el cliente desea tratar de manera diferente, y el éxito en situaciones que el cliente desea tratar de la misma manera.
Si hago una consulta que, en teoría, podría devolver cualquier número de resultados, cero, uno, doscientos, etc., entonces debería devolver "éxito" siempre que la API entregue la lista completa de todos los resultados. Y, posiblemente, en los casos en que haya muchos resultados, devolvió una lista parcial de resultados para evitar un tamaño excesivo, y hay una forma acordada de cómo obtendría los otros resultados. Eso es porque, como cliente, a menudo quiero manejar el caso de cero resultados como el caso de más resultados. Podría tratarlo de manera diferente, pero no quiero que me obliguen a hacerlo.
Es diferente en el caso de que busque un valor. Espero exactamente un resultado, el valor que estoy buscando. Y necesito ese resultado para continuar lo que quiero hacer de una manera significativa. Aquí es mucho más aceptable devolver un estado 404 para el caso de que no haya ningún valor, porque de todos modos necesito manejar ese caso de manera diferente.
Resumen: si el cliente espera cualquier número de resultados, de cero a números grandes, devuelva "éxito" si se entregan todos los resultados, incluso si el número es cero. Si el cliente espera exactamente un resultado, devuelva el éxito si se encuentra el resultado y un error si no se encuentra el resultado.