隧道 AngularJs 请求在外部 API 中使用 Rails

Posted

技术标签:

【中文标题】隧道 AngularJs 请求在外部 API 中使用 Rails【英文标题】:Tunneling AngularJs request for use them in External Api's with Rails 【发布时间】:2015-05-04 12:13:35 【问题描述】:

有谁知道如何向 Rails 服务器执行委托外部 api 请求,而不是在客户端以通用方式执行它们?

这是为了避免客户端的跨域请求(http://0.0.0.0:3000 不被 Access-Control-Allow-Origin 所允许。)

【问题讨论】:

【参考方案1】:

我发现了一种使用 Globbing Routes 的非常简单的方法!

在路由器中:

match "api/*url" => "tunnel_api#tunnel_request", via: [:all]

并创建控制器:

class TunnelApiController < ApplicationController
 def tunnel_request
   query_params_string = "?"
   params.each do |key, value|
     unless ((key == "controller") || (key == "action") || (key == "url"))
       query_params_string += key + "=" + value + "&"
     end
   end
   query_params_string = query_params_string[0..-2]
   uri = URI.parse("external_host_url_with_ssl" + params[:url] + query_params_string)
   http = Net::HTTP.new(uri.host, uri.port)
   http.use_ssl = true
   response = http.request(Net::HTTP::Get.new(uri.request_uri))
   render json: response.body, status: 200
 end
end

棘手的部分是如何在请求中包含查询参数,所以在这里你可以看到我用于创建 query_params_string 的循环。 还要记住处理不同的 HTTP 方法(POST、OPTIONS、...)

我为此在我的博客中创建了一个帖子:http://blog.tcit.cl/post/112616639620/rails-and-angularjs-with-external-api

【讨论】:

以上是关于隧道 AngularJs 请求在外部 API 中使用 Rails的主要内容,如果未能解决你的问题,请参考以下文章

Android Oreo (API 26) - 在外部存储中创建目录

PHP 在外部文件中运行MODx API

如何使用 typescript 在外部 js 文件中调用函数

如何在外部 tomcat 中部署 Spring-boot REST API

Laravel 中是不是有任何方法可以在外部 API 中验证用户并将其保存到本地会话,以便我可以使用所有 User:: 和 Auth:: 函数?

在 REST API 中使 PUT 创建请求幂等