Estoy diseñando una API RESTful y me enfrenté al problema del título, reformulado para mayor claridad:
¿Debo fallar rápidamente si un cliente envía un parámetro no reconocido? Por ejemplo,
http://example.com/api/foo?bar=true&paula=bean
En lo anterior, bar
es un parámetro válido pero paula
no está especificado por la API. Debería
- Avisar al cliente del error
- Fallar rapido
- Ignoralo
Si le advierto al cliente, solo puedo emitir una advertencia para el primer parámetro, ya que podrían estar enviando un número casi infinito de ellos, y el servidor presumiblemente tiene mejores cosas que hacer. De manera similar, cuando falla, solo especificaría el primer parámetro inválido como el problema.
Prefiero el fracaso en lugar de emitir una advertencia para obligar al programador a tomar medidas, ya que de lo contrario podrían ignorar el problema y seguir desperdiciando recursos, o terminar cargando a sí mismos sin darse cuenta. No hacer nada es aún peor en ese sentido.
¿Mis argumentos tienen sentido? ¿Existe una práctica aceptada en tales cosas?
fuente
api/v1
etc. se encargaría de eso, pero aún no permite actualizaciones incrementales. +1Respuestas:
En mi opinión, debe devolver un estado de Solicitud no válida, para que el cliente sepa que lo que está tratando de hacer no es válido. Mi opinión sobre esto está influenciada por el concepto de que las API RESTful son reconocibles . Si proporciona información suficiente por adelantado, el cliente nunca intenta hacer una solicitud no válida para empezar. Si lo hace, entonces hay algo mal en el código del cliente y la falla rápida alertará al segundo sobre este error. Por supuesto, ese es un enfoque muy purista y puede no recomendarse si su API no es reconocible.
Un enfoque más pragmático puede ser ignorar los parámetros inválidos, pero de cualquier manera, asegúrese de documentar bien el comportamiento.
fuente
Si haces una API pública (o una API que será utilizada por otro equipo), recomendaría devolver el error como sugirió @RubberDuck.
Si su API se consumirá solo dentro de su equipo (o solo usted), puede ser más fácil ignorar los campos adicionales (por ejemplo, requiere menos código y es más fácil de hacer).
fuente