2009-04-15 21 views
12

Quiero probar la API REST en mi sitio de Rails. ¿Cuál es la forma más fácil/mejor de hacer esto con el marco de prueba de rieles? Solo estoy haciendo las cosas de recursos estándar, así que me pregunto en particular, ya que esto es tan estándar estándar, si hay alguna forma automática de probar esto.Mejor forma de probar los rieles API REST XML?

+1

¿Quiere decir cómo puede hacer solicitudes de prueba a la URL utilizando algún tipo de herramienta? ¿O estás hablando de crear una prueba de unidad de automatización de algún tipo? – laz

Respuesta

2

Recomendaría usar Cucumber. Pepino emula un navegador y puede verificar los resultados que obtiene. Esto funciona bien para solicitudes XML, así como JSON y HTML antiguo simple.

0

Si está buscando probar las API que ha creado manualmente, ¡puede intentar esto! Parece que funciona bien!

REST Client - Simply Test REST APIs

No se puede hacer la comprobación automática con esto, sin embargo!

+0

Eso no es realmente REST si los URI están disponibles como parte de la API. Solo puede haber un URI de punto de entrada en una API RESTful. – aehlke

2

Esto no es automático, pero es realmente genial para ver lo que está haciendo su API.

http://hurl.r09.railsrumble.com/

+1

Les advierto dándoles su nombre de usuario/contraseña para las solicitudes autorizadas. Sugeriría tomar el código y la instalación para uso privado en ese caso. https://github.com/defunkt/hurl –

1

Utilizamos RESTClient un complemento de Firefox para visitar y servicios REST prueba.

https://addons.mozilla.org/en-US/firefox/addon/9780

Hemos estado usando esto en mi equipo durante un par de meses y yo no pensamos que podríamos hacer nuestro trabajo sin ella. Es muy fácil de usar y de usar.

Si obtiene la última versión de Sourceforge, incluso hay compatibilidad con Oauth, algo que no he encontrado en ningún otro cliente de REST.

http://sourceforge.net/projects/restclient/develop

Uno, de muchos, ventajas de utilizar un complemento de Firefox es que es plattform cruz. Usamos la misma herramienta (RESTclient) para todos los miembros de nuestro equipo, aunque utilizamos diferentes sistemas operativos (Mac, Linux, Windows).

1

Usted puede intentar curl

uso --form-string para pasar los datos del formulario al servidor

(1)

curl --form-string "book_key=BOOK1234" --form-string "author=Gandhi" -X PUT 'http://localhost:3000/api/show_all_books_of_a_particular_author?params1=value1&param2=value2' 

En el controlador obtendrá params['book_key']=BOOK1234 y params["author"]="Gandhi"

uso -F "[email protected];type=application/msword;"

(2)

curl -F "[email protected]_experiments_with_truth.pdf;type=application/pdf;" --form-string "author=Gandhi" --form-string "[email protected]" -X PUT 'http://localhost:3000/api/submit_a_pdf_book?params1=value1&param2=value2' 

En el controlador obtendrá params['email]="[email protected]" y params["author"]="Gandhi" y params["document"] = "File(object)". Esto solo funciona si test.doc está en el directorio actual. No olvide pasar mime-type ya que el servidor puede tomarlo como "application octet-stream" y necesita escribir en el código para manejar esto por separado.

5

Lancé mi propia solución a esto y pensé que sería útil.Escribí un módulo que usa las gemas json, curb y addressable para enviar solicitudes GET, PUT, POST y DELETE a localhost: 3000. Puede solicitar XML (como la pregunta original solicitada) o json. Devuelve el cuerpo de respuesta como Hash. Es principalmente un envoltorio alrededor de la joya de la acera, que creo que tiene una sintaxis horrenda.

Tenga en cuenta que estoy cargando automáticamente el archivo api_key. Esto se puede deshabilitar pasando :api_key => false o roto usando api_key => "wrong". Es posible que desee dejar esto o modificarlo para que se ajuste a su esquema de autenticación.

Aquí está el módulo:

module ApiTesting 
    # requres the json, curb, and addressable gems 

    require "addressable/uri" 

    def api_call(path, verb, query_hash={}, options={}) 
    options.reverse_merge! :api_key => "abc1234", :format => "xml" 
    query_hash.reverse_merge!({:api_key => options["api_key"]}) if options[:api_key] 
    query = to_query_string(query_hash) 
    full_path = "http://localhost:3000/#{path}.#{options[:format]}?#{query}" 
    response = case verb 
     when :get 
     Curl::Easy.perform(full_path) 
     when :post 
     Curl::Easy.http_post("http://localhost:3000/#{path}.#{options[:format]}", query) 
     when :put 
     Curl::Easy.http_put(full_path, nil) 
     when :delete 
     Curl::Easy.http_delete(full_path) 
    end 
    case options[:format] 
     when "xml" 
     Hash.from_xml(response.body_str) 
     when "json" 
     JSON.parse(response.body_str) 
    end 
    end 

    private 

    def to_query_string(val) 
    uri = Addressable::URI.new 
    uri.query_values = val 
    uri.query 
    end 

end

Y aquí hay algunos ejemplos sencillos: Atributos recursos requirente GET:

api_call("calls/41", :get)

Creación de recursos con la publicación:

api_call("people", :post, {:person => {:first => "Robert", :last => "Smith" } })

recursos de Actualización con PUT:

api_call("people/21", :put, {:person => { :first => "Bob" } })

Eliminación de recursos con DELETE:

api_call("calls/41", :delete)

Desactivación de inserción automática de api_key:

api_call("calls/41", :get, {}, {:api_key => false})

Utilice la api_key equivocada:

api_call("calls/41", :get, {}, {:api_key => "wrong"})

uso como JSON (por defecto es xml):

api_call("calls/41", :get, {}, {:format => "json"})
+1

¿por qué no se acumula esto en una joya que los rieles pueden aprovechar durante las pruebas? – masukomi

+0

Definitivamente debes convertirlo en una joya. Buen trabajo –