【问题标题】:Serializing JSON to JSON API format in Ruby/Rails在 Ruby/Rails 中将 JSON 序列化为 JSON API 格式
【发布时间】:2016-12-04 17:25:20
【问题描述】:

在我的 Rails 5 API 项目中,我正在使用 SOAP 服务。通过使用 Savon gem 版本 2,我将来自任何 SOAP Web 服务的响应解析为 JSON 格式。

在我的 Rails 项目中,我正在为多个 SOAP 服务创建一个外观。假设 4 个 SOAP 服务具有 90% 相似的响应格式/结构。我希望我的外观能够以 JSON API 格式接受和发送来自服务的信息。

我找到了一些解决方案,但不是一个理想有效的解决方案:

  1. 将来自 SOAP 服务的 JSON/SOAP 响应解析为模型/对象,然后通过现有库(例如 jsonapi-resources gem)将其输出到 JSON API
  2. 在 Rails 中从头开始构建序列化程序
  3. 使用 ESB

第一个选项似乎有点矫枉过正且容易出错。

第二个选项似乎是一个非常耗时的项目,如果我必须在短时间内自己完成,它也容易出现很多错误。

由于预算原因,第三个选项不可行。

所以我的问题是,是否存在可以帮助我的工具?我一直在做大量的研究,但找不到任何似乎可以解决我的问题或满足我需求的东西。

目前的解决方案

我发现选择选项 1 最实用。我正在做类似以下的事情:

# app/controllers/api/v1/some_resources_controller.rb
...
# Retrieve response from service
response = fetch_resources_from_service(query)
# Pick out the values from the response that we want to output
resource_params = strip_response(reponse, whitelist: [:id, :title, :date, ...]
# Create a model object from these stripped/whitelisted params
resource = Api::V1::SomeResource.new(resource_params)
# Render in JSON API format (with active_model_serializer)
render json: resource, adapter: :jsonapi, serializer: Api::V1::SomeResourceSerializer

【问题讨论】:

  • 也许这个gist可以帮助你作为一个起点?我可能会从创建一些测试用例开始,然后创建一个服务并使用哈希(希望它应该涵盖大部分测试),然后在您继续进行时添加自定义功能。
  • 选项 1 似乎是最好的选项,因为您可以利用现有工具。如果您不需要数据库中的模型,您可以使用clockworkwhenever 设置定期任务,将其删除。
  • 我现在实际上正在执行选项 1,它的效果比预期的要好,并且没有花费太多时间。我将根据我的进度编辑我的帖子..

标签: ruby-on-rails json web-services soap json-api


【解决方案1】:

我不是一个 Ruby 人,但是用于简单地将 xml 转换为 json 的 ruby​​ 库呢?看起来您正在构建类似带有内置 SOAP 到 json 转换器的反向代理的东西。如果是这样,可能很难跟上后端 API 更改和您的对象模型。使用https://github.com/jnunemaker/crack 之类的东西可以让您免于为每个端点创建对象模型。

还发现了一个类似的 SO question Ruby XML to JSON Converter?

【讨论】:

    猜你喜欢
    • 2011-07-05
    • 1970-01-01
    • 1970-01-01
    • 2015-11-02
    • 1970-01-01
    • 2010-10-11
    • 1970-01-01
    • 1970-01-01
    • 2018-09-15
    相关资源
    最近更新 更多