2015-05-27 5 views
0

Это мой первый опыт работы с RAILS и разработкой API. Я сделал с кодом и в основном выглядеть следующим образом:HTTP-ответы в API Rails

В стороне контроллера:

class Api::V1::EnergyController < ApplicationController 
    skip_before_filter :verify_authenticity_token 

    def index 

    end 

    def create 
     # Loading data in this part 

     # Doing some calculations for the loaded data (Loops and ifs) 

     #Outputs (organizing the output data) 


     # Render JSON - Output data 
     render json: response_hash 

    end 

end 

Я наблюдал некоторые учебники и чтения, и они всегда включают в себя HTTP ответов (таким образом: render json:{status: 200, message: "success"}.to_json). Для сообщений об ошибках также в той же форме. В моем коде у меня нет таких HTTP-записей/строк кода. Однако, когда API завершения работы всплывает следующее сообщение:

HTTP/1.1 200 OK 
X-Frame-Options: SAMEORIGIN 
X-Xss-Protection: 1; mode=block 
X-Content-Type-Options: nosniff 
Content-Type: application/json; charset=utf-8 
Etag: W/"6e509fca130161acdbef91f0013f7726" 
Cache-Control: max-age=0, private, must-revalidate 
X-Request-Id: 0d59ea00-b032-42ae-a28a-3fb6e31b5a59 
X-Runtime: 28.173758 
Server: WEBrick/1.3.1 (Ruby/2.2.2/2015-04-13) 
Date: Wed, 27 May 2015 13:02:58 GMT 
Content-Length: 1552 
Connection: Keep-Alive 
Set-Cookie: request_method=POST; path=/ 

Мой вопрос, я должен добавить эти ответы HTTP таким образом? Это что нужно?

+0

Непонятно, что вы просите - приведенный выше код даст ответ HTTP. Просьба уточнить. –

+0

Я отредактировал мой вопрос, может быть, теперь это ясно. – kaka

ответ

0

В соответствии со стандартами кодирования вам необходимо добавить код состояния для каждого ответа. То, как вы упомянули, неверно.

Правильный способ добавить код состояния в ответах

render :status => "200", :json => {:message => "success"}.to_json 
render :status => "400", :json => {:status => "Unauthorized Access"}.to_json 
+0

Вам не требуется явно указывать код состояния, если вам не нужно, чтобы он отличался от соглашений, используемых Rails. –

+0

Ваш ответ мне очень помогает. Имеют смысл визуализировать, например: ошибка в начале кода? В моем коде я вижу, что загрузка данных будет точкой отказа – kaka

1

Вы не обязаны явно указать код статуса с вашим ответом, если не нужно, чтобы отличаться от условностей, используемой Rails.

Например, когда вы делаете

render json: { message: 'success' } 

Rails будет по умолчанию установлен код состояния в 200, как вы уже видели, на основе вашего первоначального вопроса. Однако вы можете быть явным о том, что код состояния вы хотите вернулись

Общий блок кода в create действия будет

def create 
    @model = SomeModel.new(create_params) 
    if @model.save 
    render json: @model, status: :created 
    else 
    render json: { errors: @model.errors.full_messages }, status: :unprocessable_entity 
end 

Таким образом, если модель проходит проверку на корректность и успешно сохранена в БД, мы отвечаем с представлением JSON модели и явно установить status в :created, который равен 201.

Если модель не может быть сохранена в БД, мы отвечаем на ошибки и явно устанавливаем статус на :unprocessable_entity, который равен 422.

Надеюсь, это поможет.