我需要创建一个Ruby on rails API,其中的路由将如下所示

mydomain.com/api/v1/xxxxxxxx/
mydomain.com/api/v1/xxxxxxxx/messages
mydomain.com/api/v1/xxxxxxxx/authors/123/books

xxxxxxxx表示API密钥,它应该作为params[:key]或类似params[:api_connection_key]之类的数字来提取

例如,mydomain.com/api/v1/xxxxxxxx/messages指向应用程序/控制器/api/v1/Messages_Controler.rb

我想知道你将如何设计config/routes.rb来实现这一点?(控制器和其他逻辑都很好,只有路由)

No mydomain.com/api/v1/messages?key=xxxxxxxx不是一个选项,标头身份验证是不可能的

推荐答案

scope支持动态分段

Rails.application.routes.draw

  namespace :api do
    namespace :v1 do
      scope "/:key" do
        resources :messages
      end
    end
  end
  
end

Ruby-on-rails相关问答推荐

如何测试自定义路由?

Rails 7.1.3如何在生产环境中查看堆栈跟踪

如何修改使用Google Cloud App Engine部署rails 7应用程序的步骤

安装特定版本的Ruby时出现问题(OpenSSL问题)

使用has_many_through关联创建记录 – Ruby on Rails

我如何在不在 gemfile 中的 rake 任务中要求 gem?

has_many 通过大小验证

在 Ruby on Rails html.erb 文件中循环

在 Rails 的 ActiveRecord 中,touch 有什么用?

为什么使用 HTTP PUT 和 DELETE 方法而不是 POST?

在 Ruby on Rails 上,我们如何在控制器中打印调试信息?

如何在 routes.rb 中使用 301 或 302 进行重定向

如何在我的 Gemfile 中找到未使用的Ruby

不允许请求来源:使用 Rails5 和 ActionCable 时的 http://localhost:3001

Rails Active Admin css 与 Twitter Bootstrap css 冲突

如何让 ActiveAdmin 使用强参数?

导轨链接到:远程

如何更改 Rails 3 控制器中视图文件的默认路径?

使用 ActiveRecord 获取列名

如何拆分长行的 Ruby