代码之家  ›  专栏  ›  技术社区  ›  Zach

在Rails上设计RESTful公共API的最佳实践是什么?

  •  9
  • Zach  · 技术社区  · 16 年前

    Rails提供现成的RESTful资源,但您是否将这些资源用于实际的公共API?如果是这样,您将如何完成API的版本控制,即 example.com/api/v2/foo/bar ?

    1 回复  |  直到 9 年前
        1
  •  11
  •   Ben Scofield    16 年前

    通常,我的应用程序的API实际上是建立在构成HTML接口的相同资源上的。对于某些人(不是我),可能只是使用脚手架生成器中的代码,但无论我是自定义编写还是让生成器处理它,很少有实例表明我只向编程API公开资源,而不向最终用户视图公开资源。

    到目前为止,版本控制对于我构建的应用程序来说并不是一个问题,但是我可以考虑两种方法来实现它。

    1)可以添加前缀为“v1”、“v2”等的路由,这些路由设置了一个参数,然后可以在控制器中访问该参数,以指定要进行的处理:

    RB:

    map.resources :posts, :path_prefix => '/:version'
    

    在Post中\u controller.rb

    class PostsController < ApplicationController
      def index
        respond_to do |format|
          format.xml do
            if params[:version] == 'v1'
              # ...
            else
              # ...
            end
          end
        end
      end
    end
    

    2)您还可以考虑为每个版本添加自定义响应格式。

    在初始值设定项/mime-types.rb中

    Mime::Type.register_alias "application/xml", :v1
    Mime::Type.register_alias "application/xml", :v2
    

    在Post中\u controller.rb

    class PostsController < ApplicationController
      def index
        respond_to do |format|
          format.v1 do
            # ...
          end
          format.v2 do
            # ...
          end
        end
      end
    end
    

    前者提供example.com/v1/posts.xml和example.com/v2/posts.xml等URL;后者提供example.com/posts.v1和example.com/posts.v2等URL。