gpt4 book ai didi

ruby-on-rails - Ruby on Rails API 命名空间作为默认路径

转载 作者:行者123 更新时间:2023-12-04 16:59:45 24 4
gpt4 key购买 nike

我正在按照本教程设置我的 Rails API 服务器:building-awesome-rails-apis-part-1
一切正常,除了提到不需要在路由中指明命名空间的部分。例如。

Now our URls look like: http://api.example.com/v1/people or justhttp://api.example.com/people if you don’t use the version, itdoesn’t interfere with your regular people routes, and it looks great.


当我打电话时 http://api.mydomain.com/v1/therapists/它有效,但是当我尝试省略 v1 时URL 中的命名空间它不起作用,我需要做任何额外的配置吗?
我正在使用 Rails 6.0.3.4这是我的特定 routes.rb 文件:
Rails.application.routes.draw do
namespace :api, :path => "", :constraints => {:subdomain => "api"} do
namespace :v1 do
resources :therapists do
resources :appointments
end
end
end
end
解决方案
正如 zhisme 所建议的,我使用了 rack-rewrite gem 来做我想做的事。
首先,我将 gem 添加到我的 Gemfile 中:
gem 'rack-rewrite', '~> 1.5', '>= 1.5.1'
之后我在 config/application.rb中添加了配置文件
  config.middleware.insert_before(Rack::Runtime, Rack::Rewrite) do
rewrite '/therapists', '/v1/therapists'
end
它奏效了。

最佳答案

为了实现这一点,您需要在 Rack 中插入代码。有一颗 gem rack-rewrite可以在 Rails 代码执行之前进行重定向,因此在 Rails 路由解析之前。检查他们的自述文件进行安装。
因此,将 README 示例修改为您的问题,您可以执行以下操作

config.middleware.insert_before(Rack::Runtime, Rack::Rewrite) do
rewrite '/api/therapists/appointments', '/api/v1/therapists/appointments'
end
或者您可以进行重定向,让您的 api 消费者知道正确的 url 有点不同
config.middleware.insert_before(Rack::Runtime, Rack::Rewrite) do
moved_permanently '/api/therapists/appointments', '/api/v1/therapists/appointments'
end
有相当不错的 article描述不同的解决方案,请查看更多详细信息。

关于ruby-on-rails - Ruby on Rails API 命名空间作为默认路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64703421/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com