Estoy trabajando en un proyecto y después de discutir con la gente en el trabajo durante más de una hora. Decidí saber qué diría la gente en el intercambio de fichas.
Estamos escribiendo una API para un sistema, hay una consulta que debería devolver un árbol de Organización o un árbol de Objetivos.
El árbol de Organización es la organización en la que el usuario está presente. En otras palabras, este árbol siempre debe existir. En la organización, un árbol de meta debe estar siempre presente. (ahí es donde comenzó la discusión). En caso de que el árbol no exista, mi compañero de trabajo decidió que sería correcto responder la respuesta con el código de estado 200. Y luego comenzó a pedirme que arregle mi código porque la aplicación se estaba desmoronando cuando no hay árbol.
Intentaré evitar las llamas y la furia.
Sugerí generar un error 404 cuando no hay árbol. Al menos me dejaría saber que algo está mal. Cuando uso 200, tengo que agregar una verificación especial a mi respuesta en la devolución de llamada exitosa para manejar errores. Espero recibir un objeto, pero en realidad puedo recibir una respuesta vacía porque no se encuentra nada. Suena totalmente justo marcar la respuesta como un 404. Y luego comenzó la guerra y recibí el mensaje de que no entendía el esquema del código de estado HTTP. ¿Entonces estoy aquí y pregunto qué le pasa al 404 en este caso? Incluso recibí el argumento "No encontró nada, así que es correcto devolver 200". Creo que está mal ya que el árbol debe estar siempre presente. Si no encontramos nada y esperamos algo, debería ser un 404.
Más información,
Olvidé agregar las URL que se obtienen.
Organizaciones
/OrgTree/Get
Metas
/GoalTree/GetByDate?versionDate=...
/GoalTree/GetById?versionId=...
Mi error, se requieren ambos parámetros. Si se proporciona cualquier versiónDate que se pueda analizar a una fecha, devolverá la revisión de cierre. Si ingresa algo en el pasado, devolverá la primera revisión. Si por Id con un id que no existe, sospecho que devolverá una respuesta vacía con 200.
Extra
Además, creo que la mejor respuesta al problema es crear objetos predeterminados cuando se crean organizaciones, no tener un árbol no debería ser un caso válido y debería verse como un comportamiento indefinido. No hay forma de que se pueda usar una cuenta sin ambos árboles. Por eso, deben estar siempre presentes.
También me vinculó esto (uno similar pero no puedo encontrarlo)
http://viswaug.files.wordpress.com/2008/11/http-headers-status1.png
/GoalTree/GetById?versionId=CompletelyInvalidID
volver? No fue un éxito, ya que el recurso nombrado /GoalTree/GetById?versionId=CompletelyInvalidID
literalmente no se encontró.