【发布时间】:2016-12-04 17:25:20
【问题描述】:
在我的 Rails 5 API 项目中,我正在使用 SOAP 服务。通过使用 Savon gem 版本 2,我将来自任何 SOAP Web 服务的响应解析为 JSON 格式。
在我的 Rails 项目中,我正在为多个 SOAP 服务创建一个外观。假设 4 个 SOAP 服务具有 90% 相似的响应格式/结构。我希望我的外观能够以 JSON API 格式接受和发送来自服务的信息。
我找到了一些解决方案,但不是一个理想有效的解决方案:
- 将来自 SOAP 服务的 JSON/SOAP 响应解析为模型/对象,然后通过现有库(例如 jsonapi-resources gem)将其输出到 JSON API
- 在 Rails 中从头开始构建序列化程序
- 使用 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,它的效果比预期的要好,并且没有花费太多时间。我将根据我的进度编辑我的帖子..
标签: ruby-on-rails json web-services soap json-api