2015-10-22 16:26 GMT-03:00 Mariano Matayoshi <
matayosh...@gmail.com>:
> [...]
>
> Cualquier feedback es bienvenido.
- Qué cosas son las que no les gustaban de las librerías que venían
usando? Sería bueno explicarlo en el README, en el contexto de la
motivación que los lleva a introducir esta nueva gema al mundo.
- Como dice Pote, abrir un nuevo proceso por request ya va a tener un
overhead bastante importante, entonces las ventajas de esto tendrían
que ser muy evidentes. (Además de ser más lento de por sí, no permite
hacer cosas que ayudan a la performance como mantener conexiones
persistentes.)
- El comando a ejecutar lo están armando con sprintf (!). Si insisten
en disparar un subproceso, miren Shellwords [1] para escapar todo lo
que hace falta. O directamente pasen los parámetros en un array como
permite Process.spawn [2].
- En general, la forma de detectar si una respuesta de HTTP es JSON es
mirar el header Content-Type. Sniffearlo [3] no me parece una buena
idea para tus usuarios. (Y si insisten en sniffear, por lo menos no
parseen dos veces.)
- Usar OpenStruct para representar cualquier response no es una buena
práctica y puede exponerte a un ataque de DoS (por lo menos en la
mayoría de las versiones de Ruby). No conocía recursive-open-struct,
es bastante atroz, te recomiendo leer sobre el Global Method Cache [4]
(aunque hay cambios en Ruby 2, sigue siendo un problema si usás cosas
como class_eval dinámicamente). Y, sobre todo, YAGNI.
[1]
http://ruby-doc.org/stdlib-2.2.0/libdoc/shellwords/rdoc/Shellwords.html
[2]
http://ruby-doc.org/core-2.2.0/Process.html#method-c-spawn
[3]
https://github.com/casapick/paper-cup/blob/master/lib/paper_cup/utils.rb
[4]
https://github.com/charliesome/charlie.bz/blob/master/posts/things-that-clear-rubys-method-cache.md