MIMEタイプ

アクションは、MIMEタイプ検出、自動ヘッダ、ホワイトリストなどのための高度な機能をしています..

 

リクエストイントロスペクション

要求されたMIMEタイプが何であるかを理解するために、アクションが見AcceptリクエストヘッダとハイレベルのAPIを公開しています#format#accept?

第一は、MIMEタイプのシンボル表現を返し(例えば:html:json:xmlなど)、第二は、それが現在のブラウザによって受け入れられるかどうMIMEタイプ文字列とチェックを受け入れる照会方法です。

# apps/web/controllers/dashboard/index.rb
module Web::Controllers::Dashboard
  class Index
    include Web::Action

    def call(params)
      puts format                     # => :html

      puts accept?('text/html')       # => true
      puts accept?('application/png') # => false
    end
  end
end

 

自動のContent-Type

アクションが返すContent-Type自動的に要求されたMIMEタイプと文字セットに応じてレスポンスヘッダを。

クライアントが要求した場合のためにAccept: text/html,application/xhtml+xml,application/xml;q=0.9、アクションが返されますContent-Type: text/html; charset=utf-8

 

デフォルトのリクエストのフォーマット

クライアントがジェネリックを要求した場合Accept: */*、アクションはにフォールバックしますアプリケーションのデフォルトのフォーマット。これは、私たちは安全に私たちの例のようなケースを処理することを可能にする設定です。デフォルト値はです:html

# apps/web/application.rb

module Web
  class Application < Hanami::Application
    configure do
      # ...
      default_request_format :json
    end
  end
end

 

デフォルトの応答フォーマット

我々はJSONのAPIアプリケーションを構築している場合、それを指定することが有用であることができ:json、応答のデフォルトのMIMEタイプとして。デフォルト値はです:html

# apps/web/application.rb

module Web
  class Application < Hanami::Application
    configure do
      # ...
      default_response_format :json
    end
  end
end

 

デフォルトの文字セット

同様に、我々は返すように異なるデフォルトの文字セットを指定することができます。標準値があるutf-8が、我々は我々の設定で変更することができます。

# apps/web/application.rb

module Web
  class Application < Hanami::Application
    configure do
      # ...
      default_charset 'koi8-r'
    end
  end
end

 

オーバーライド

我々が返さ強制することができます方法はありContent-Type使用が:#format=

# apps/web/controllers/dashboard/index.rb
module Web::Controllers::Dashboard
  class Index
    include Web::Action

    def call(params)
      puts self.format # => :html

      # force a different value
      self.format        =  :json
      puts self.format # => :json
    end
  end
end

上記の例では、返されますContent-Type: application/json; charset=utf-8

 

ホワイトリスト

また、受け入れたMIMEタイプの範囲を制限することができます。着信要求は、この制約を満たしていない場合は、アプリケーションが返されますNot Acceptable(状態を406)。

# apps/web/controllers/dashboard/index.rb
module Web::Controllers::Dashboard
  class Index
    include Web::Action
    accept :html, :json

    def call(params)
      # ...
    end
  end
end

 

MIMEタイプを登録

花見は、最も一般的なMIMEタイプの100以上のを知っています。しかし、我々はそれらを使用するためにカスタムタイプを追加することができます#format=.accept

我々のアプリケーションの設定、我々が使用できるでcontroller.formatキーがフォーマットシンボルであるハッシュを受け付け、( :custom)及び値は、MIMEタイプの標準に発現文字列(ですapplication/custom)。

# apps/web/application.rb

module Web
  class Application < Hanami::Application
    configure do
      # ...
      controller.format custom: 'application/custom'
    end
  end
end