【发布时间】:2021-05-17 15:40:09
【问题描述】:
我的应用程序通过 REST API 将数据发送到元数据存储库。我选择 Faraday 来处理 HTTP 请求。我基本上设置了一些标头、一个 json 数据集和 POST 到 web 服务。以下代码发生在技能控制器中,并在用户决定发布变量定义时触发:
### Create the variable for the BusinessArea, get the location header in return
connection = Faraday.new("https://sis-sms-r.application.opendataquality.ch", :ssl => {:verify => false})
request_body = {
definedVariableType: @skill.skill_type.property,
description: {
en: @skill.description_translations.where(language: :en).take!,
de: @skill.description_translations.where(language: :de_OFS).take!,
fr: @skill.description_translations.where(language: :fr_OFS).take!
},
identifier: "Variable TEST 10",
name: {
en: @skill.name_translations.where(language: :en).take!,
de: @skill.name_translations.where(language: :de_OFS).take!,
fr: @skill.name_translations.where(language: :fr_OFS).take!
},
pattern: nil,
pseudonymized: true,
validFrom: Time.now,
validTo: Time.now + 1.year,
version: "1",
responsibleDeputy: {
identifier: @skill.deputy.email,
name: @skill.deputy.external_directory_id
},
responsibleOrgUnit: {
identifier: @skill.organisation.code,
name: @skill.organisation.external_reference
},
responsiblePerson: {
identifier: @skill.responsible.email,
name: @skill.responsible.external_directory_id
}
}
puts "--- body"
puts request_body
response = connection.post("/api/InformationFields/#{business_area.uuid}/definedVariables") do |req|
req.body = request_body.to_json
req.headers['Content-Type'] = 'application/json'
req.headers['Accept'] = 'application/json'
req.headers['Authorization'] = "Bearer #{token}"
end
puts "--- response"
puts response.status # Status 201 => successful request
puts response.body # Message
puts response.headers["location"] # uuid of new object
然后该方法呈现技能的显示视图的更新部分及其更新状态。
只要请求的主体非常简单,它就可以正常工作。但我想处理可变数量的翻译,并且在某些情况下还将子记录发送到 Web 服务:即实现循环、嵌套的 json 对象,可能还有部分。
我阅读了 Jbuilder 功能来为视图创建复杂的 json。我可以在控制器中使用类似的东西吗?或者有没有办法创建一个 json 视图(和部分)并将其呈现到法拉第的请求正文中?哪个是构建此功能的好架构?你知道有什么文章可以描述这个吗?
非常感谢你给我指路。
【问题讨论】:
标签: ruby-on-rails json