Rails: Restrict API requests to JSON format

后端 未结 3 775
醉酒成梦
醉酒成梦 2021-02-03 23:31

I would like to restrict requests to all API controllers to being redirected to the JSON path. I would like to use a redirect since also the URL should change according to the r

相关标签:
3条回答
  • 2021-02-04 00:15

    Setting a default in your routes won't turn all requests into a JSON request.

    What you want is to make sure that whatever you're rendering is a JSON response

    You pretty much had it in the first option except you need to do this

    before_filter :set_default_response_format
    
    private
      def set_default_response_format
        request.format = :json
      end
    

    That would go under your Base API controller so that when it gets to your actual action the format will always be JSON.

    0 讨论(0)
  • 2021-02-04 00:19

    If you want to return a 404, or raise a RouteNotFound error if the format is not :json, I would add a route constraint like this:

    Require JSON format:

    # routes.rb
    MyApp::Application.routes.draw do
      namespace :api, constraints: { format: 'json' } do
        namespace :v1 do
          resources :posts
        end
      end
    end
    

    More information can be found here: http://edgeguides.rubyonrails.org/routing.html#request-based-constraints

    0 讨论(0)
  • 2021-02-04 00:21

    Second option, using routes format. If a user explicitly requests a XML format, he should not receive a JSON response. He should get a message saying that this URL doesn't answer to XML format, or 404.

    By the way, it would be rather easy to respond to all which is what you should do in my opinion.

    class FooController
      respond_to :xml, :json
      def show
        @bar = Bar.find(params[:id])
        respond_with(@bar)
      end
    end
    
    0 讨论(0)
提交回复
热议问题