.net - tengo - Implicaciones de JSONP con verdadero DESCANSO
que es agujetas en españa (5)
Desde mi entendimiento, JSONP solo se puede lograr usando el verbo GET.
Sí.
Afortunadamente, las solicitudes GET informativas idempotentes son el caso de uso más común para JSON entre dominios.
esto excluye el cumplimiento del núcleo con el verdadero RESTO en el que debe hacer uso de diferentes verbos, es decir, OBTENER, PONER, PUBLICAR, ELIMINAR, etc.
Sí.
No me molesta demasiado ''cumplir'' con REST como un estándar abstracto, pero es una verdadera preocupación si las solicitudes GET extraviadas, fugas y cacheables pueden tener accidentalmente efectos secundarios.
Existen estrategias que puede usar para reducir la probabilidad de este tipo de problema, como requerir un usuario por API o una clave de envío de uso único como parámetro para permitir que la acción continúe. Si está permitiendo el acceso de escritura a una API a través de JSONP, tendrá que estar pensando en este tipo de cosas de todos modos, para evitar ataques XSRF.
Desde mi entendimiento, JSONP solo se puede lograr usando el verbo GET. Suponiendo que esto sea cierto, lo cual creo que es, entonces esto excluye el cumplimiento del núcleo con un verdadero REST en el cual se deben usar diferentes verbos, es decir, OBTENER, PONER, PUBLICAR, ELIMINAR, etc ... para propósitos diferentes y específicos.
Mi pregunta es a qué tipo de barreras me enfrentaré si dijera permitir la actualización y eliminación de recursos usando un servicio JSONP utilizando una solicitud get.
¿Es una mejor práctica ofrecer un servicio JSON e indicar que el usuario necesitará un proxy del lado del servidor para consumir usando JavaScript XDomain?
Saludos,
Andrés
Disculpas antes de tiempo si responder a una publicación anterior es incorrecto en SO.
@bobince
No me molesta demasiado ''cumplir'' con REST como un estándar abstracto, pero es una verdadera preocupación si las solicitudes GET extraviadas, fugas y cacheables pueden tener accidentalmente efectos secundarios.
Existen estrategias que puede usar para reducir la probabilidad de este tipo de problema, como requerir un usuario por API o una clave de envío de uso único como parámetro para permitir que la acción continúe. Si está permitiendo el acceso de escritura a una API a través de JSONP, tendrá que estar pensando en este tipo de cosas de todos modos, para evitar ataques XSRF.
Por lo tanto, no es posible realizar un RESTful verdadero con JSONP debido a la falta de verbos PUT, DELETE y POST. Sin embargo, muchas API JSONP aún permiten escrituras. Recuerdo vagamente que es posible en la API OAuth JSONP de Facebook.
A pesar de todo, parece que una API JSONP RESTful falsa podría lograrse suponiendo que en el lado del servidor si "callback =" AND "method =" están presentes en la URL y el método es uno de GET, POST, DELETE o PUT, entonces lo hará ser tratado como si fuera una verdadera solicitud de RESTO.
Esto rompe la URL única para un paradigma de recurso único de REST ya que la devolución de llamada cambiará casi todas las veces, e incluso si se mantuviera constante, habría 4 representaciones de URL, una para cada método. Entonces mi pregunta es, ¿cuáles son las ramificaciones de este rompimiento del paradigma RESTful, específicamente con respecto a sus preocupaciones sobre las "solicitudes GET perdidas, filtrables y cacheables" con "efectos colaterales" [potencialmente] potenciales?
JSONP es una solución de límite de seguridad (llamadas ajax solo permitidas en el mismo dominio). Como se dijo, es muy limitado y solo se puede usar como de solo lectura (incluye HTTP GET a través de html script / src). Para eso, facilita la integración y los mashups sin la necesidad de tener un proxy del lado del servidor que realice la solicitud HTTP api real.
Pero nunca rompería mi API de descanso solo para permitir que jsonp do hiciera ninguna acción de escritura (como eliminar, crear, escribir).
Otro gran inconveniente es la seguridad: las llamadas JSONP son activadas por el navegador y la transmisión de nombre de usuario / contraseña no puede funcionar (sería claramente visible dentro de la solicitud). Para muchas API, la autenticación deshabilitada para escribir acciones es un no-go. Incluso si trabaja con tokens de un solo uso generados por el servidor, esto es peligroso porque puede utilizarlo malívocamente utilizando herramientas como ''curl''.
Una técnica emergente para manejar CORS (Cross Origin Resource Sharing) usa HTTP Access Control. Puede encontrar un artículo informativo en las páginas de desarrolladores de Mozilla , en un artículo sobre el blog de Kendo y en el sitio de W3.
En resumen, en el lado del servidor, deberá devolver un par de encabezados de Access-Control
que ayudan a controlar el acceso. Para solicitudes GET / POST simples, puede simplemente devolver un encabezado Access-Control-Allow-Origin
, para solicitudes más complejas con otros métodos necesitará encabezados adicionales, que se pueden encontrar en los recursos anteriores.
JSONP es muy limitado, ya que lo que hace es incluir el script usando la etiqueta <script>
y luego hacer una devolución de llamada a alguna función que procese.
Personalmente, prefiero un verdadero servicio. Escribir un proxy en el servidor no es tan difícil, y le permite tener más control sobre él (como tiempos de espera, manejo de errores, otros tipos de solicitudes, etc.)