我目前正在做以下事情,但感觉“kludgy”:
module Sinatra
module DynFormat
def dform(data,ct)
if ct == 'xml';return data.to_xml;end
if ct == 'json';return data.to_json;end
end
end
helpers DynFormat
end
我的目标是提前计划。现在我们只为这个特定的Web服务使用XML,但是只要我们堆栈中的所有组件都支持它,我们就想转移到JSON。
以下是一个示例路线:
get '/api/people/named/:name/:format' do
format = params[:format]
h = {'xml' => 'text/xml','json' => 'application/json'}
content_type h[format], :charset => 'utf-8'
person = params[:name]
salesperson = Salespeople.find(:all, :conditions => ['name LIKE ?', "%#{person}%"])
"#{dform(salesperson,format)}"
end
感觉就像我没有尽可能地做到这一点。
答案 0 :(得分:2)
帮手中的一些清理:
代码:
module Sinatra
module DynFormat
CONTENT_TYPES={'xml' => 'text/xml','json' => 'application/json'}
def dform(data,format=params[:format])
content_type CONTENT_TYPES[format], :charset => 'utf-8'
case format
when 'xml'
data.to_xml
when 'json'
data.to_json
end
end
end
helpers DynFormat
end
这里我考虑了内容类型处理,并删除了人物临时变量,因为它仅使用一次以支持使用参数。 代码:
get '/api/people/named/:name/:format' do
salesperson = Salespeople.find(:all, :conditions => ['name LIKE ?', "%#{params[:name]}%"])
dform(salesperson)
end
有道理,看起来很酷吗?