2011-05-18 12 views
34

Digamos que hay un Producto con Pedidos. Si solicita/products/product_id, devolverá un 404 si product_id no existe. ¿Pero should/products/product_id/orders devuelve un 404 si no hay pedidos para este producto o debería devolver un array vacío?¿Debería una API RESTful devolver 404 para matrices de objetos?

+0

yo Puedes definir tus propios resultados. Dé a cada resultado una identificación diferente – Grumpy

+2

+1: Estamos debatiendo la misma pregunta en este momento, con colecciones de ofertas de video. –

+0

@Grumpy ¿Puedes explicar un poco más lo que quieres decir? – rbp

Respuesta

47

Devolveré una colección vacía. Un producto con cero pedidos es un concepto completamente válido, por lo que la existencia de una colección de órdenes vacía tiene más sentido que un 404, que podría inferir que este producto no tiene una colección de pedidos.

+2

+ 1, Fuimos de esta manera y me siento feliz con la decisión. – ale

+0

¿Deben considerarse los pedidos como un recurso en sí mismo? o una información devuelta por el recurso product_id? – chernevik

+0

Chernevik Sí. Si es una URL diferente y puede devolver un 200, entonces es un recurso diferente. El servidor puede manejar ambos recursos usando el mismo controlador, pero son dos recursos diferentes. –

2

realmente se debe hacer sólo una de dos cosas

Cualquiera de devolver un código de estado 200 (OK), y una matriz vacía en el cuerpo.

O Devuelva 204 (NO CONTENT) código de estado y NO cuerpo de respuesta.

Para mí, la opción 2 parece más técnicamente correcta y se mantiene en línea con los principios de REST y HTTP.

Sin embargo, la opción 1 parece ser más eficiente para el cliente, porque el cliente no necesita lógica adicional para diferenciar entre dos códigos de estado (satisfactorios). Ya que sabe que siempre recibirá un arreglo, simplemente tiene que comprobar si se consiguió ninguno, uno o muchos artículos y procesar adecuadamente

0

En mi opinión:

Estamos hablando de valores de estado HTTP aquí, y debería ser de un nivel más alto de dar respuestas.

Uno debería ver esto en capas de delegados. Al igual que cuando su API no puede responder a una solicitud, en caso de que la llamada api no esté disponible, puede responder con un 404.

Pero cuando su llamada existe, y podría responder con una colección de datos, pero es una colección vacía, puede devolver solo un http 200, con un resultado vacío.

Utilizaría los valores de estado http para dar una indicación sobre la validación de la solicitud, y no hacerlo directamente dependiente del contenido en las capas de API más profundas.

O uno podría seguir estrictamente los protocolos que se encuentran en la red, pero nadie los sigue ...

Cuestiones relacionadas