Skip to content
KitploitKITPLOIT
HerramientasExploitsBlog
Log in
Enviar
HerramientasExploitsBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

FeedsContactoPrivacidad© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
rabl-old — Sistema de plantillas Ruby para generar APIs JSON y XML, con una corrección para CVE-2014-4671. Admite parciales, herencia y nodos personalizados para una construcción flexible de respuestas API. | Kitploit
Herramientas/GitHubGitHub/cph/rabl-old
Utilidades de Propósito GeneralAnálisis de VulnerabilidadesSeguridad WebSeguridad de APIsArchived
GitHubcph/rabl-old

rabl-old

Sistema de plantillas Ruby para generar APIs JSON y XML, con una corrección para CVE-2014-4671. Admite parciales, herencia y nodos personalizados para una construcción flexible de respuestas API.

Ver Repositorio
24hace 9 añosAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

RABL

Continuous Integration status Dependency Status

RABL (Ruby API Builder Language) es un sistema de plantillas Ruby para Rails y Padrino que genera JSON, XML, MessagePack, PList y BSON. Al usar el método 'to_json' de ActiveRecord, me encuentro deseando una solución más expresiva y potente para generar APIs. Esto es especialmente cierto cuando la representación JSON es compleja o no coincide exactamente con el esquema definido en la base de datos.

En particular, quiero fácilmente:

  • Crear nodos arbitrarios nombrados según la combinación de datos en un objeto
  • Pasar argumentos a métodos y almacenar el resultado como un nodo hijo
  • Renderizar plantillas parciales y heredar para reducir la duplicación de código
  • Renombrar o aliasar atributos para cambiar el nombre respecto al modelo
  • Añadir atributos de un hijo a un nodo padre
  • Incluir nodos solo si se ha cumplido una determinada condición

Cualquiera que haya probado el método 'to_json' usado en ActiveRecord para generar una respuesta JSON ha sentido el dolor de este enfoque restrictivo. RABL es un sistema de plantillas general creado para resolver estos problemas abordando la generación de respuestas API de una manera completamente nueva.

En esencia, RABL se trata de adherirse a los principios MVC delegando las representaciones de datos de la API a la capa de vista de tu aplicación. Para un desglose de conceptos erróneos comunes sobre RABL, consulta nuestra guía para entender RABL que puede ayudar a aclarar cualquier confusión sobre este proyecto.

Cambios Importantes

  • v0.8.0 (publicado el 14 de febrero de 2013) elimina la dependencia de multi_json y se basa en Oj (o JSON) como analizador JSON. Simplifica el código, elimina una dependencia pero es posible que desees eliminar cualquier referencia a MultiJson.

  • v0.6.14 (publicado el 28 de junio de 2012) requiere el uso de render_views con RSpec para probar las plantillas. De lo contrario, el controlador simplemente pasará el comando render como lo hace con las plantillas ERB.

Instalación

Instala RABL como una gema:``` gem install rabl

o añádelo a tu Gemfile:```ruby
# Gemfile
gem 'rabl'
# Also add either `oj` or `yajl-ruby` as the JSON parser
gem 'oj'

y ejecuta bundle install para instalar la dependencia.

Si estás usando Rails 2.3.8 (y superiores), Rails 3.X o Padrino, RABL funciona sin configuración.

Importante: Con Padrino, asegúrate de que la gema rabl esté listada después de la gema padrino en tu Gemfile, de lo contrario Rabl no se registrará correctamente como un motor de plantillas.

Con Sinatra, o cualquier otro framework basado en tilt, simplemente registra:```ruby Rabl.register!

y RABL se inicializará y estará listo para usar. Para su uso con Sinatra, consulta la guía de [Uso de Sinatra](https://github.com/nesquena/rabl/wiki/Setup-for-Sinatra).

## Resumen ##

Puedes usar RABL para generar APIs basadas en JSON y XML desde cualquier objeto de Ruby. Con RABL, los datos generalmente se derivan principalmente de modelos (independientes del ORM) y la representación de la salida de la API se describe dentro de una plantilla de vista utilizando un DSL simple de Ruby. Esto te permite mantener tus datos separados del JSON o XML que deseas generar.

Una vez que hayas instalado RABL (explicado anteriormente), puedes construir una plantilla de vista de RABL y luego renderizarla desde tus aplicaciones Sinatra, Padrino o Rails desde el controlador (o ruta) muy fácilmente. Usando [Padrino](http://padrinorb.com) como ejemplo, suponiendo que tienes un modelo `Post` lleno de publicaciones de blog, puedes renderizar una representación de la API (tanto JSON como XML) creando una ruta:```ruby
# app/app.rb
get "/posts", :provides => [:json, :xml] do
  @user = current_user
  @posts = Post.order("id DESC")
  render "posts/index"
end

Luego podemos crear la siguiente plantilla RABL para expresar la salida de la API de @posts:```ruby

app/views/posts/index.rabl

collection @posts attributes :id, :title, :subject child(:user) { attributes :full_name } node(:read) { |post| post.read_by?(@user) }

Lo cual generaría el siguiente JSON o XML al visitar `http://localhost:3000/posts.json````js
[{  "post" :
  {
    "id" : 5, title: "...", subject: "...",
    "user" : { full_name : "..." },
    "read" : true
  }
}]

Eso es una visión general básica, pero hay mucho más que ver, como partials, herencia, nodos personalizados, etc. Lee los detalles completos de RABL a continuación.

Configuración

RABL está diseñado para requerir poca o ninguna configuración para funcionar. Este es el caso en la mayoría de los escenarios, pero dependiendo de tus necesidades, es posible que desees establecer las siguientes configuraciones globales en tu aplicación (este bloque es completamente opcional):```ruby

config/initializers/rabl_init.rb

require 'rabl' Rabl.configure do |config|

Commented as these are defaults

config.cache_all_output = false

config.cache_sources = Rails.env != 'development' # Defaults to false

config.cache_engine = Rabl::CacheEngine.new # Defaults to Rails cache

config.perform_caching = false

config.escape_all_output = false

config.json_engine = nil # Class with #dump class method (defaults JSON)

config.msgpack_engine = nil # Defaults to ::MessagePack

config.bson_engine = nil # Defaults to ::BSON

config.plist_engine = nil # Defaults to ::Plist::Emit

config.include_json_root = true

config.include_msgpack_root = true

config.include_bson_root = true

config.include_plist_root = true

config.include_xml_root = false

config.include_child_root = true

config.enable_json_callbacks = false

config.xml_options = { :dasherize => true, :skip_types => false }

config.view_paths = []

config.raise_on_missing_attribute = true # Defaults to false

config.replace_nil_values_with_empty_strings = true # Defaults to false

end

Cada opción especifica un comportamiento relacionado con la salida de RABL. Si `include_json_root` está deshabilitado, se elimina el
nodo raíz para cada objeto raíz en la salida, y `enable_json_callbacks` habilita el soporte para la salida de estilo 'jsonp' callback
si la solicitud entrante tiene un parámetro 'callback'.

Si `include_child_root` se establece en `false`, los objetos hijo en la respuesta no incluirán
un nodo raíz por defecto. Esto permite afinar aún más la estructura de respuesta deseada.

Si `cache_engine` está configurado, debe asignarlo a una clase con un método `fetch`. Consulte el [motor predeterminado](https://github.com/nesquena/rabl/blob/master/lib/rabl/cache_engine.rb) para ver un ejemplo.

Si `perform_caching` se establece en `true`, entonces realizará el almacenamiento en caché. Puede
ignorar esta opción si está usando Rails, es equivalente a
`config.action_controller.perform_caching` de Rails.

Si `cache_sources` se establece en `true`, las búsquedas de plantillas se almacenarán en caché para mejorar el rendimiento.
La caché se puede restablecer manualmente ejecutando `Rabl.reset_source_cache!` dentro de su aplicación.

Si `cache_all_output` se establece en `true`, cada plantilla, incluyendo cada plantilla individual utilizada como parte de una colección, se almacenará en caché por separado.
Además, cualquier cosa dentro de child, glue y partial también se almacenará en caché por separado.
Para almacenar en caché solo una sola plantilla, consulte la sección titulada 'Caching' más abajo.
Descargar herramienta