
Ruby-Templating-System zum Generieren von JSON- und XML-APIs, mit einem Fix für CVE-2014-4671. Unterstützt Partials, Vererbung und benutzerdefinierte Knoten für die flexible Konstruktion von API-Antworten.
RABL (Ruby API Builder Language) ist ein Rails- und Padrino Ruby-Template-System zum Generieren von JSON, XML, MessagePack, PList und BSON. Wenn ich die ActiveRecord-Methode 'to_json' verwende, wünsche ich mir eine ausdrucksstärkere und leistungsfähigere Lösung zum Erstellen von APIs. Dies gilt insbesondere dann, wenn die JSON-Darstellung komplex ist oder nicht dem exakten Schema entspricht, das in der Datenbank definiert ist.
Insbesondere möchte ich problemlos:
Jeder, der die in ActiveRecord verwendete 'to_json'-Methode zum Erstellen einer JSON-Antwort ausprobiert hat, hat den Schmerz dieses restriktiven Ansatzes gespürt. RABL ist ein allgemeines Template-System, das entwickelt wurde, um diese Probleme zu lösen, indem es die API-Antworterzeugung auf völlig neue Weise angeht.
RABL dreht sich im Kern darum, MVC-Prinzipien einzuhalten, indem die API-Datendarstellung an die View-Schicht Ihrer Anwendung delegiert wird. Eine Aufschlüsselung häufiger Missverständnisse über RABL finden Sie in unserem Leitfaden zum Verständnis von RABL, der helfen kann, etwaige Verwirrung über dieses Projekt zu beseitigen.
v0.8.0 (veröffentlicht am 14. Februar 2013) entfernt die multi_json-Abhängigkeit und verlässt sich auf Oj (oder JSON) als JSON-Parser. Vereinfacht den Code, entfernt eine Abhängigkeit, aber Sie sollten alle Verweise auf MultiJson entfernen.
v0.6.14 (veröffentlicht am 28. Juni 2012) erfordert die Verwendung von render_views mit RSpec, um Templates zu testen. Andernfalls gibt der Controller den Render-Befehl einfach durch, wie es bei ERB-Templates der Fall ist.
Installieren Sie RABL als Gem:``` gem install rabl
oder füge zu deiner Gemfile hinzu:```ruby
# Gemfile
gem 'rabl'
# Also add either `oj` or `yajl-ruby` as the JSON parser
gem 'oj'
und führe bundle install aus, um die Abhängigkeit zu installieren.
Wenn du Rails 2.3.8 (und höher), Rails 3.X oder Padrino verwendest, funktioniert RABL ohne Konfiguration.
Wichtig: Stelle bei Padrino sicher, dass das rabl-gem nach dem padrino-gem in deiner Gemfile aufgeführt ist, da sonst Rabl nicht ordnungsgemäß als Template-Engine registriert wird.
Mit Sinatra oder einem anderen tilt-basierten Framework registriere einfach:```ruby Rabl.register!
und RABL wird initialisiert und ist bereit zur Verwendung. Für die Nutzung mit Sinatra lesen Sie bitte die
[Sinatra Nutzungsanleitung](https://github.com/nesquena/rabl/wiki/Setup-for-Sinatra).
## Übersicht ##
Sie können RABL verwenden, um JSON- und XML-basierte APIs aus einem beliebigen Ruby-Objekt zu generieren.
Mit RABL werden die Daten typischerweise hauptsächlich aus Modellen (ORM-unabhängig) abgeleitet und die Darstellung der API-Ausgabe wird in
einer View-Vorlage unter Verwendung einer einfachen Ruby-DSL beschrieben. Dies ermöglicht es Ihnen, Ihre Daten von dem JSON oder XML zu trennen, das Sie ausgeben möchten.
Sobald Sie RABL installiert haben (oben erläutert), können Sie eine RABL-View-Vorlage erstellen und dann die Vorlage
aus Ihren Sinatra-, Padrino- oder Rails-Anwendungen sehr einfach vom Controller (oder von der Route) aus rendern. Am Beispiel von [Padrino](http://padrinorb.com):
Angenommen, Sie haben ein `Post`-Modell mit Blogbeiträgen, können Sie eine API-Darstellung (sowohl JSON als auch XML) rendern, indem Sie eine Route erstellen:```ruby
# app/app.rb
get "/posts", :provides => [:json, :xml] do
@user = current_user
@posts = Post.order("id DESC")
render "posts/index"
end
Dann können wir die folgende RABL-Vorlage erstellen, um die API-Ausgabe von @posts auszudrücken:```ruby
collection @posts attributes :id, :title, :subject child(:user) { attributes :full_name } node(:read) { |post| post.read_by?(@user) }
Welches würde das folgende JSON oder XML ausgeben, wenn man `http://localhost:3000/posts.json` besucht.```js
[{ "post" :
{
"id" : 5, title: "...", subject: "...",
"user" : { full_name : "..." },
"read" : true
}
}]
Das ist ein grundlegender Überblick, aber es gibt noch viel mehr zu sehen, wie z.B. partials, Vererbung, benutzerdefinierte Knoten usw. Lesen Sie die vollständigen Details zu RABL unten.
RABL ist so konzipiert, dass es wenig bis gar keine Konfiguration benötigt, um zu funktionieren. Dies ist in den meisten Szenarien der Fall, aber abhängig von Ihren Bedürfnissen möchten Sie möglicherweise die folgenden globalen Konfigurationen in Ihrer Anwendung festlegen (dieser Block ist völlig optional):```ruby
require 'rabl' Rabl.configure do |config|
end
Jede Option beschreibt das Verhalten in Bezug auf die Ausgabe von RABL. Wenn `include_json_root` deaktiviert ist, wird der Wurzelknoten für jedes Wurzelobjekt in der Ausgabe entfernt, und `enable_json_callbacks` aktiviert die Unterstützung für 'jsonp'-Callback-Ausgabe, wenn die eingehende Anfrage einen 'callback'-Parameter enthält.
Wenn `include_child_root` auf false gesetzt ist, enthalten untergeordnete Objekte in der Antwort standardmäßig keinen Wurzelknoten. Dies ermöglicht Ihnen, die gewünschte Antwortstruktur weiter zu verfeinern.
Wenn `cache_engine` gesetzt ist, sollten Sie es einer Klasse mit einer `fetch`-Methode zuweisen. Siehe die [Standard-Engine](https://github.com/nesquena/rabl/blob/master/lib/rabl/cache_engine.rb) für ein Beispiel.
Wenn `perform_caching` auf `true` gesetzt ist, wird Caching durchgeführt. Sie können diese Option ignorieren, wenn Sie Rails verwenden, sie entspricht dem Rails-`config.action_controller.perform_caching`
Wenn `cache_sources` auf `true` gesetzt ist, werden Template-Lookups zur Leistungssteigerung gecacht. Der Cache kann manuell zurückgesetzt werden, indem Sie `Rabl.reset_source_cache!` in Ihrer Anwendung ausführen.