Jump to content

POST/PUT vía API en formato JSON


Recommended Posts

Hola.

Estoy haciendo un conector para utilizar el API de Prestashop en mi aplicación y veo que añadiendo &output_format=JSON a la petición GET me devuelve la información en formato JSON, pero me interesaría también enviarle las peticiones PUT y POST para crear/modificar productos, etc... en formato JSON, no obstante siempre me las solicita en XML.

Estoy haciendo algo mal o para enviarle info solo acepta XML el API de prestashop?

Gracias!!

Link to comment
Share on other sites

hace 11 horas, gusman126 dijo:

Recuerda que puedes conseguir los XML en blanco con las URL "blank" no tengo el enlace exacto .

 

Esto es lo que hago, al final he visto en la documentación que los JSON solamente son para "consultar" los recursos mediante GET, pero si quieres añadir POST o modificar PUT, has de hacerlo mediante los XML que genera él.

No obstante, ahora me he encontrado en un problema y no entiendo porqué lo hace así el API, resulta que según la documentación, para modificar un recurso, por ejemplo un producto mediante PUT, has de recibir el XML del producto mediante GET, modificar el XML recibido con los cambios que desees y volverlo a enviar por PUT, pero resulta que el XML que ser recibe por GET tiene campos que no son "Writables" cuando los envías por PUT. Entonces no entiendo la lógica para modificar los recursos, salvo que tengas que eliminar dichos campos del XML, cosa que no indica en la documentación oficial.

Alguien se ha topado con esto?

Link to comment
Share on other sites

hace 4 horas, Victor Casajuana Mas dijo:

Esto es lo que hago, al final he visto en la documentación que los JSON solamente son para "consultar" los recursos mediante GET, pero si quieres añadir POST o modificar PUT, has de hacerlo mediante los XML que genera él.

No obstante, ahora me he encontrado en un problema y no entiendo porqué lo hace así el API, resulta que según la documentación, para modificar un recurso, por ejemplo un producto mediante PUT, has de recibir el XML del producto mediante GET, modificar el XML recibido con los cambios que desees y volverlo a enviar por PUT, pero resulta que el XML que ser recibe por GET tiene campos que no son "Writables" cuando los envías por PUT. Entonces no entiendo la lógica para modificar los recursos, salvo que tengas que eliminar dichos campos del XML, cosa que no indica en la documentación oficial.

Alguien se ha topado con esto?

Si te sirve, yo he tenido que eliminar algun nodo antes de enviar un xml modificado para que aceptara ese fichero xml

 

 

Link to comment
Share on other sites

hace 17 horas, gusman126 dijo:

Si te sirve, yo he tenido que eliminar algun nodo antes de enviar un xml modificado para que aceptara ese fichero xml

 

 

si, al final también lo he echo. He seguido estos pasos; primero me descargo la sinopsys donde aparecen los campos que son "readonly" y la guardo para futuros procesos de actualización. Luego cuando tengo que actualizar un producto, me descargo GET el recurso del producto que quiera actualizar, reviso la sinopsys descargada anteriormente y me cargo los campos "readonly", luego ya simplemente envío la estructura XML sin esos campos por PUT y el producto se actualiza correctamente.

Bajo mi punto de vista, lo hacen un poco complicado, no costaría nada tener 2 métodos en el API, uno para descargar el recurso completo y otro para poder modificarlo, o en el recurso completo que te descargas mediante GET, poner etiquetas de readonly para no depender de la sinopsys descargada anteriormente, aunque para algunos esto pueda resultar cargar de información la respuesta. Son diferentes formas de trabajar, quizás el origen de todo es que la documentación sea un poco "escueta" en este aspecto.

Link to comment
Share on other sites

hace 29 minutos, gusman126 dijo:

Escueta? mas bien nula .

Gracias por la explicación

 

Bueno, la verdad es que comparada con la de hace algunos años, al menos es algo: https://devdocs.prestashop.com/1.7/webservice/

El primer conector que hice me las tuve que ingeniar para que funcionase.

Ahora estoy con un conector multiplataforma que sirva para prestashop, woocomerce y magento (de momento) y la verdad es que cuando veo la documentación de las otras API me pongo a llorar lo completas que están, y sobre todo que trabajan bidireccionalmente en JSON, eso de enviarle por XML a Prestashop, pues que quieres que te diga, a gustos colores, pero habiendo prefiero trabajar en JSON.

 

Saludos!

Link to comment
Share on other sites

  • 2 years later...
On 9/23/2020 at 5:01 AM, Victor Casajuana Mas said:

Bueno, la verdad es que comparada con la de hace algunos años, al menos es algo: https://devdocs.prestashop.com/1.7/webservice/

El primer conector que hice me las tuve que ingeniar para que funcionase.

Ahora estoy con un conector multiplataforma que sirva para prestashop, woocomerce y magento (de momento) y la verdad es que cuando veo la documentación de las otras API me pongo a llorar lo completas que están, y sobre todo que trabajan bidireccionalmente en JSON, eso de enviarle por XML a Prestashop, pues que quieres que te diga, a gustos colores, pero habiendo prefiero trabajar en JSON.

 

Saludos!

Hola! Pudiste solucionar estos problemas?
Yo ahora estoy haciendo pruebas con el Insomnia y tratando de agregar este producto de prueba paro me da error 400 Bad Request.
Lo que es las credenciales como token y metodo de llamado esta bien porque el GET Funciona bien.. pero a la hora de hacer el post no funciona...

Este xml que estoy usando es el blanck schema que le hice un GET, le saque todos los campos que no me interesa cargar en la prueba y deje solo esos.... O SI o SI tengo que cargar todos los campos?

Alguien tiene idea que estoy haciendo mal?

<?xml version="1.0" encoding="UTF-8"?>
<prestashop
xmlns:xlink="http://www.w3.org/1999/xlink">
    <product>
    <name>
    <language id="1">
    <![CDATA["Producto de prueba TITULO LANG 1"]]>
</language>
<language id="2">
    <![CDATA["Producto de prueba TITULO LANG 2"]]>
</language>
</name>
<description>
    <language id="1">
        <![CDATA["Producto Description LANGUAGUE 1!"]]>
    </language>
    <language id="2">
        <![CDATA["Producto Description LANGUAGUE 1!"]]>
    </language>
</description>
<price>
    <![CDATA[25.0]]>
</price>
</product>
</prestashop>

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...