Pregunta

Mi API REST devuelve JSON.

Actualmente estoy devolviendo text / plain como el tipo MIME, pero se siente divertido. ¿Debo devolver application / x-javascript o algún otro tipo?

La segunda pregunta es con respecto al código de estado HTTP para condiciones de error. Si mi API REST está devolviendo un estado de error, lo estoy devolviendo como JSON

{ result: "fail", errorcode: 1024, errormesg: "That sucked. Try again!" }

¿Debe permanecer el código de estado HTTP en 200 OK ?

¿Fue útil?

Solución

La especificación JSON sugiere application / json , y eso parece estar respaldado por el IETF y registro IANA .

En la segunda pregunta, creo que si el manejo del mensaje falla de alguna manera, debería devolver una respuesta de error estándar y estructurada como un mensaje JSON; solo si se produce un error en la entrega del mensaje al controlador de back-end por algún motivo, debe considerar un código de error HTTP.

Actualización 2014-06-27 : los días en que los clientes (navegadores) que solo trabajaron con una respuesta 200 han pasado y el consejo que prevalece para las API de REST es usar los códigos de respuesta HTTP adecuados para la respuesta , 2xx para respuestas exitosas (por ejemplo, 201 Created for PUT; 204 No Content for DELETE) y 4xx y 5xx para todas las condiciones de error, incluidas las de la propia API.

Otros consejos

Prefiero responder con un estado de error HTTP y una carga útil específica de la aplicación.

No, no debes devolver 200 en una condición de error.

Está bien repetir el código de estado o incluir un código de error más detallado en la carga útil de respuesta.

El Content-type correcto para devolver es application / json , según RFC 4627 , que también registra el tipo MIME IANA (y, de hecho, aparece en la página de IANA). Por supuesto, si escribiera un cliente, querría ser más liberal en lo que acepta y también aceptar otros como text / json y text / x-json .

Ahora, si hay un error, no debe devolver HTTP 200, eso es fundamentalmente sin REST. Sé que a veces no hay una coincidencia exacta para su error, pero elija los errores 4XX (error del cliente) o 5XX (error del servidor) más cercanos en RFC 2616 Secciones 10.4 -10.5, y sea más preciso en el JSON.

Si por " REST API " quiere decir que desea seguir una arquitectura REST, luego el tipo de medio a usar está determinado por la funcionalidad que desea exponer a través de la API REST. ¿Quieres poder crear nuevos objetos? ¿Quieres consultar una lista de objetos? Editar un objeto? Si es así, entonces un buen tipo de medio RESTful para usar podría ser vnd.collection + json porque define una interfaz vinculada a hipertexto para manipular una colección de objetos json.

Nota: una API RESTful podría usar la aplicación / json de tipo de medios, pero este tipo de medios no tiene una interfaz RESTful vinculada por hipertexto, por lo que sería un punto final en el cambio de estado.

También es completamente aceptable seguir una arquitectura de API web, donde las llamadas HTTP RPC devuelven objetos application / json, y otras llamadas HTTP RPC manipulan esos objetos, y no hay una interfaz de enlace de hipertexto para usar y navegar los cambios de estado. Pero esto no es REST.

Me gusta esta descripción de REST (del creador de REST):

REST APIS debe manejarse mediante hipertexto

  

En otras palabras, si el motor del estado de la aplicación (y, por tanto, la API)   no está siendo manejado por el hipertexto, entonces no puede ser RESTful y no puede   Ser una API REST. Periodo.

Además, de la discusión de esa publicación es este ejemplo de una aplicación REST: Perdido Solicitud de REST Spam-E para niños

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top