Entries for WebServices

Testear WebServices Restful con curl

written by uve

29 October 2012

Para un proyecto que estoy desarrollando ahora mismo, he necesitado montar unos WebServices con Rest, usando JSON. La forma más rápida de testearlo es utilizando curl. Para ello podemos utilizar el siguiente comando para simular una petición GET. Esto nos mostrará algo parecido a lo siguiente:

$ curl -v -H "Content-Type: application/json" -H "Accept: application/json" -X GET  http://localhost:8888
* About to connect() to localhost port 8888 (#0)
*   Trying 127.0.0.1... connected
> GET / HTTP/1.1
> User-Agent: curl/7.22.0 (x86_64-pc-linux-gnu) libcurl/7.22.0 OpenSSL/1.0.1 zlib/1.2.3.4 libidn/1.23 librtmp/2.3
> Host: localhost:8888
> Content-Type: application/json
> Accept: application/json
>
* HTTP 1.0, assume close after body
< HTTP/1.0 200 OK
< Date: Mon, 29 Oct 2012 21:48:49 GMT
< Server: WSGIServer/0.2 Python/3.2.3
< Content-Type: application/json; charset=utf-8
< Content-Length: 159
<
* Closing connection #0
{"respuesta": "en json"}

Ahora vamos a suponer un WebService que cree un usuario. Para ello, recibe 'username', 'password' y 'email'. Para la creación se va a utilizar el método POST. Y esto debe mostrarnos algo similar:

$ curl -v -H "Content-Type: application/json" -H "Accept: application/json" -X POST -d '{"username":"myuser", "password":"mypwd", "email":"myemail@mytest.com"}' http://localhost:8888
* About to connect() to localhost port 8888 (#0)
*   Trying 127.0.0.1... connected
> POST / HTTP/1.1
> User-Agent: curl/7.22.0 (x86_64-pc-linux-gnu) libcurl/7.22.0 OpenSSL/1.0.1 zlib/1.2.3.4 libidn/1.23 librtmp/2.3
> Host: localhost:8888
> Content-Type: application/json
> Accept: application/json
> Content-Length: 69
>
* upload completely sent off: 69out of 69 bytes
* HTTP 1.0, assume close after body
< HTTP/1.0 200 OK
< Date: Mon, 29 Oct 2012 21:52:47 GMT
< Server: WSGIServer/0.2 Python/3.2.3
< Content-Type: application/json; charset=utf-8
< Content-Length: 43
<
* Closing connection #0
{"respuesta": "en json"}

Además, podemos aprovechar para testear métodos HTTP que no estén implementados. Supongamos que PUT no está implementado, entonces el resultado deberá ser 'Method not allowed':

$ curl -v -H "Content-Type: application/json" -H "Accept: application/json" -X PUT -d '{"...":"..."}' http://localhost:8888
* About to connect() to localhost port 8888 (#0)
*   Trying 127.0.0.1... connected
> PUT / HTTP/1.1
> User-Agent: curl/7.22.0 (x86_64-pc-linux-gnu) libcurl/7.22.0 OpenSSL/1.0.1 zlib/1.2.3.4 libidn/1.23 librtmp/2.3
> Host: localhost:8888
> Content-Type: application/json
> Accept: application/json
> Content-Length: 69
>
* upload completely sent off: 69out of 69 bytes
* HTTP 1.0, assume close after body
< HTTP/1.0 405 METHOD NOT ALLOWED
< Date: Mon, 29 Oct 2012 21:55:36 GMT
< Server: WSGIServer/0.2 Python/3.2.3
< Content-Type: text/html; charset=utf-8
< Allow: GET, POST
< Content-Length: 0
<
* Closing connection #0

Por otro lado, también podemos probar que no se soporta una respuesta en algo que no sea json, por ejemplo text/html. Y como resultado obtendremos un 'Unsoported media type':

$ curl -v -H "Content-Type: application/json" -H "Accept: text/html" -X GET  http://localhost:8888
* About to connect() to localhost port 8888 (#0)
* Trying 127.0.0.1... connected
> GET / HTTP/1.1
> User-Agent: curl/7.22.0 (x86_64-pc-linux-gnu) libcurl/7.22.0 OpenSSL/1.0.1 zlib/1.2.3.4 libidn/1.23 librtmp/2.3
> Host: localhost:8888
> Content-Type: application/json
> Accept: text/html
>
* HTTP 1.0, assume close after body
< HTTP/1.0 415 UNSUPPORTED MEDIA TYPE
< Date: Mon, 29 Oct 2012 22:00:34 GMT
< Server: WSGIServer/0.2 Python/3.2.3
< Content-Type: text/html; charset=utf-8
< Content-Length: 0
<
* Closing connection #0

 

Full entry >>

Hacer una petición a un WebService con curl

written by uve

15 February 2012

Para comprobar rápidamente si un WebService está funcionando podemos utilizar el comando curl para hacer una petición y obtener la respuesta.

Para ello:

$ curl -d @request.xml http://localhost/soap/service

donde request.xml es el fichero que contiene la petición SOAP.

Actualización: 16/02/2012 0:44

Se me olvidó poner las cabeceras que son necesarias para que todo funcione:

$ curl -d @request.xml -H "SOAPAction: http://localhost/soap/service/action" -H "Content-Type: text/xml; charset=UTF-8" http://localhost/soap/service

Full entry >>

SoapUI 4.0 en Ubuntu 11.04

written by uve

8 September 2011

Estos días en el trabajo estoy desarrollando unos WebServices, y para testearlos he utilizado SoapUI, pero me he encontrado con el siguiente error:

linux soapui error Exception in thread "XpcMessageLoop" java.lang.RuntimeException: 
java.io.FileNotFoundException: Library libgthread-2.0 not found at any known locations !

Para solucionarlo, basta con editar el fichero soapui.sh y descomentar la siguiente línea:

JAVA_OPTS="$JAVA_OPTS -Dsoapui.jxbrowser.disable=true"

Full entry >>

La teoría es cuando crees saber algo, pero no funciona.
La práctica es cuando algo funciona, pero no sabes por qué.
Los programadores combinan la teoría y la práctica:
Nada funciona y no saben por qué.