Intentar realizar una solicitud HTTP GET para publicaciones filtradas por el parámetro de consulta authorId=x donde x puede ser un número que puede no corresponder con el authorId de ninguna publicación.
json-server devuelve inesperadamente HTTP 200 en lugar de la respuesta HTTP 404 cuando no hay publicaciones con un authorId coincidente (es decir, se devuelve una matriz vacía), ¿cómo se puede cambiar esto para devolver 404 ? Del mismo modo, ¿cuál sería la mejor práctica de API aquí? ¿Sería devolver una matriz vacía con HTTP 400 como ya lo hace json-server o sería más claro para los usuarios devolver la matriz vacía con HTTP 404 ?
Miré jsonServer.rewriter & express middleware (por ejemplo, la documentación json-server muestra que se puede configurar con middleware como server.use(middlewares) ) pero quería preguntar cuál sería el mejor enfoque aquí (recursos/enlaces útiles sería apreciado aquí), por ejemplo, con middleware, una opción es enviar 404 para una matriz vacía, pero ¿ json-server tiene formas integradas de manejar esto o hay un mejor enfoque?
Todos los comentarios constructivos son bienvenidos, gracias.
db.json :
{ "posts": [ { "authorId": 0, "content": "Foo bar" }, ], }Caparazón:
json-server --watch db.jsonDESCANSAR:
// Response status is expected HTTP 200. GET http://localhost:5000/posts?authorId=0 Esto devuelve al usuario con HTTP 200 como se esperaba:
[ { "authorId": 0, "content": "Foo bar", } ] // Response status is unexpected HTTP 200 but 404 was expected since response body contains an empty array. This is the problem. GET http://localhost:5000/posts?authorId=does_not_exist Esto devuelve una matriz vacía con HTTP 200 , lo que posiblemente sea inesperado (no se sabe cuál es la mejor práctica con respecto a las colecciones filtradas donde no hay coincidencia, pero cuál sería la mejor práctica aquí y cómo se puede cambiar el estado a HTTP 400 :
[]Como señaló @kindall, probablemente no sea aconsejable devolver 404, pero tal vez este sea el comportamiento existente de la API de la que se está burlando. Puede devolver una salida personalizada, desde documentos: https://github.com/typicode/json-server#custom-output-example
// In this example we simulate a server side error response router.render = (req, res) => { res.status(500).jsonp({ error: "error message here" }) }Para su ejemplo, probablemente sería algo así como (pseudocódigo no probado):
// In this example we return 404 for no content router.render = (req, res) => { if (res.locals.data.posts.length < 1) { res.status(404).jsonp({ error: "no posts" }); } else { res.jsonp(res.locals.data); } }