2

Rails を使用して REST API を作成しています。Routes と API のリクエストを受け入れる方法に関連する簡単な質問があります。

私のルートファイルには、次のコードがあります。

namespace :api do
   namespace :v1 do
      resources :productOp, :path => "product", :defaults => { :format => 'json' }
   end
end

このコードを使用して、Web ブラウザーで URL にアクセスすると、次のようになります。

http://localhost:3000/api/v1/product

それは正常に動作します。一方、json形式の投稿のみを受け入れます

「:defaults => { :format => 'json' }」を削除すると、Web ブラウザーで同じ URL を開くことができません。#index HTML を見つけようとするため、406 http メッセージが表示されます。

「:defaults => { :format => 'json' }」を削除したときになぜそれが起こったのか、誰か説明してもらえますか? また、http ポスト リクエストと json を受け入れる API を作成するにはどうすればよいですか?

情報を追加するために、コントローラーは常にjson形式で応答します。そのため、最初の行にコントローラー「respond_to :json」を含めました。

4

1 に答える 1

1

そこにデフォルトハッシュがある場合、指定するかどうかに関係なく、デフォルトでリクエストをJSONにするようにレールに指示しています。これを削除すると、Rails はこれを行わなくなります。そのため、自分でページに移動しようとすると、Rails はそれを HTML リクエストと見なし、処理しないと失敗します。

忘れた

コントローラーのアクションでは、HTML を返すこともできることを Rails に伝えていない可能性があります。JSONのみが返される場合、レールは正しく機能していませんが、見つからないというわけではないことに注意してください。404ではなく406が返されます。

次のようなものを試してください:

respond_to do |format|
  format.json { render json: @whatever }
  format.html {}
end

html はインデックス ビューをレンダリングするだけで、json リクエストは JSON で必要なものを返します。

于 2013-05-06T17:50:46.847 に答える