简体   繁体   English

API 文档的 Rails 路由

[英]Rails routes for an API documentation

I'm currently writing the documentation for the API of my website.我目前正在为我网站的 API 编写文档。

I'm not sure about the "best" way to write the routes.我不确定编写路线的“最佳”方式。 I think twitter does a good job and I'd like to copy their url structure:我认为 twitter 做得很好,我想复制他们的 url 结构:

https://dev.twitter.com/docs/api
https://dev.twitter.com/docs/api/1/get/statuses/show/:id
https://dev.twitter.com/docs/api/1/post/statuses/retweet/:id

It would be something like:它会是这样的:

 namespace :docs do
     resources :api do
         # and then... not sure
     end
 end

Not sure on how to write the routes for this part: /get/statuses/show/:id .不确定如何为这部分编写路由: /get/statuses/show/:id

Should I just create a custom route?我应该只创建一个自定义路由吗?

match "/:verb/:resource/:action/:params" => "api#resource"

Or is there a better way?或者,还有更好的方法?


What I ended up with, might help someone:)我最终得到的结果可能会对某人有所帮助:)

Ibarcraft::Application.routes.draw do
    def api_versions; [:v1] end
    def api_verbs; [ :index, :show ] end

    constraints subdomain: "api" do
        scope module: "api", as: "api" do
            versions = api_versions

            versions.each do |version|
                namespace version, defaults: { format: "json" } do

                    # all my routes
                    resources :barcrafts, only: api_verbs do
                        collection do
                            get :search
                        end
                        scope module: "barcraft" do
                            resources :users, only: [:index]
                        end
                    end
                    # and more...

                end
            end

            match 'v:api/*path', to: redirect { |params, request| "/#{versions.last}/#{params[:path]}" + (params[:format] ? ".#{params[:format]}" : "") }
            match '*path', to: redirect { |params, request| "/#{versions.last}/#{params[:path]}" + (params[:format] ? ".#{params[:format]}" : "") }
        end
    end
end

Yes you need custom route.是的,您需要自定义路线。

But note, that :action key is reserved for controller's action name, better use something like :action_name但请注意, :action键是为控制器的动作名称保留的,最好使用类似:action_name的东西

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM