私はScalatraを使用していますが、この質問はScalaプログラミングで有効です。私はRuby on Railsの背景から来ています。単純なXML Builderやjsonbuilder(https://github.com/rails/jbuilder)などのテンプレートシステムを使用して、入れて、私はRESTfulなAPIの私のJSONまたはXML出力は次のようなテンプレートを作成することで、どうなるかを完全に制御を持っていた:JSONおよび/またはXMLテンプレートを使用したScala
Jbuilder.encode do |json|
json.content format_content(@message.content)
json.(@message, :created_at, :updated_at)
json.author do
json.name @message.creator.name.familiar
json.email_address @message.creator.email_address_with_name
json.url url_for(@message.creator, format: :json)
end
if current_user.admin?
json.visitors calculate_visitors(@message)
end
json.comments @message.comments, :content, :created_at
json.attachments @message.attachments do |attachment|
json.filename attachment.filename
json.url url_for(attachment)
end
end
ここでは理想的ですが、コントローラー+アクションに必要なロジックを持つ@message
オブジェクトをまとめています。それはif current_user.admin?
のようなロジックを持つテンプレートに渡されますが、そうでない場合は何も含まれていません。
ScalaやScalatraで同様のことを行うのに使用できる同等のツールとは何ですか?私はserializer
を知っているので、特定のモデルから生成されたJSONやXMLを上書きすることができますが、それはas_json
またはas_xml
をオーバーライドするRubyで同じことです(間違っていれば修正します)。しかし、テンプレートははるかに複雑で、複数のモデル、具体的なデータ構造、データの特定の順序付けなどがあります。これは必要な柔軟性です。 Scala/Scalatra環境でこのようなテンプレートを可能にするツールが存在していますか?