Para ver el resto del contenido del post

Para ver el resto del contenido del post

💥 Para ver el resto del contenido del post en línea

💪 utilizar post en lugar de get por seguridad

Si estuvieras escribiendo una simple llamada a la API RPC, podrían ser técnicamente intercambiables siempre y cuando el procesamiento del lado del servidor no fuera diferente entre ambas llamadas. Sin embargo, para que la llamada sea RESTful, la llamada al punto final a través del método GET debe tener una funcionalidad distinta (que es obtener recursos) del método POST (que es crear nuevos recursos).

Nota al margen: existe un debate sobre si se debe permitir o no el uso de POST para actualizar recursos… aunque no estoy comentando eso, sólo te digo que algunas personas tienen un problema con ese punto.

Pero en términos generales GET se utiliza cuando el servidor devuelve algunos datos al cliente y no tienen ningún impacto en el servidor mientras que POST se utiliza para crear algún recurso en el servidor. Asi que generalmente no deberia ser lo mismo.

Piensa en ello. Cuando tu cliente hace una petición GET a un URI X, lo que está diciendo al servidor es: «Quiero una representación del recurso situado en X, y esta operación no debería cambiar nada en el servidor». Una petición PUT está diciendo: «Quiero que reemplaces lo que sea el recurso ubicado en X con la nueva entidad que te estoy dando en el cuerpo de esta petición». Una petición DELETE está diciendo: «Quiero que borres el recurso situado en X». Un PATCH está diciendo: «Te estoy dando este diff, y debes intentar aplicarlo al recurso ubicado en X y decirme si tiene éxito». Pero un POST está diciendo «Te estoy enviando estos datos subordinados al recurso en X, y tenemos un acuerdo previo sobre lo que debes hacer con ellos».

READ  Como poner los filtros en instagram

🌝 post vs get rest api

REST sólo dice que hay que ajustarse a la interfaz uniforme. En otras palabras, dice que debes hacer lo que se supone que hace POST según la especificación HTTP. Aquí está la cita de esa especificación que es relevante,

Como puedes ver en esto, tienes dos lugares donde puedes indicar al cliente donde reside el recurso recién creado. La cabecera Location debe tener una URL que apunte al nuevo recurso y también puedes devolver una entidad con los detalles.

Sí, aunque devuelva void, en una clase que extiende a Resource, tienes acceso completo al objeto Response a través del método getResponse(). Así que puedes llamar a getResponse().setEntity() con los datos que quieras.

Si respondes a 201 Created con un cuerpo de entidad, en lugar de una redirección de localización, entonces es una buena idea incluir una cabecera Content-Location que apunte al recurso que se está representando en la respuesta.

🐰 ¿puedo utilizar una petición post para leer datos?

He oído que va en contra de las mejores prácticas de REST utilizar una solicitud POST para leer datos y prefiero seguir las mejores prácticas, ya que se supone que la API es de acceso público para los clientes de la empresa.

Una cosa que hemos hecho donde yo trabajo es tener una API de servicio de «almacenamiento». Básicamente, se envía un objeto JSON al servicio y éste devuelve un UUID. Si envías el UUID como parámetro de consulta en cualquier llamada posterior a la API, ésta obtendrá los parámetros/datos del servicio de almacenamiento. Es especialmente útil si vas a hacer varias llamadas con los mismos datos, ya que sólo tienes que enviarlos una vez.

READ  Aplicacion para imagenes

Después de leer un par de preguntas similares me di cuenta de que REST no está diseñado para resolver este problema. Así que me he decidido por JSON-RPC en lugar de REST, que ofrece más flexibilidad y parece ser la solución adecuada para este tipo de problemas.

Para mejorar la respuesta de TMT, en lugar de utilizar un servicio de almacenamiento para guardar UUIDs contra los parámetros de la solicitud. En su lugar, puedes escribir una API sin estado utilizando JSON Web Tokens. Esto eliminará el problema de la gestión del almacenamiento, permitirá la reutilización y el almacenamiento en caché.

Entradas relacionadas

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos.Más información
Privacidad