150
116

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Rails】APIモードで使えるHTTPステータスコードのシンボルまとめ

Posted at

はじめに

Railsで使えるHTTPステータスコードのシンボルの一覧です。
Rails APIモードで使えるのではないかと思います。

環境

OS: macOS Catalina 10.15.3
Ruby: 2.6.5
Rails: 6.0.2.1

きっかけ

JSONを返すAPIのコントローラーでは、以下のような一文をよく見かけます。

users_controller.rb
render json: user, status: ok # この:okのこと

これは、下記のようにも書けます。

users_controller.rb
render json: user, status: 200

この方が簡潔に書けるし、「はいはい、200OKだよね!」と分かるかと思います。

でも、これならどうでしょうか?

sample.rb
status: 429

シンボルで書くと、こうなります。

sample.rb
status: :too_many_requests

**「リクエスト多すぎ!」**ってことですね。
1時間あたりに〇〇回しかリクエスト投げられないAPIを使っていて、リクエストを投げすぎたときに返ってきます。

結論:200 or :ok どちらを使うべきか

  • チーム開発を経た経験から、開発者のスキルが全員同じは絶対にない
  • HTTPステータスコードより英語の方がわかりやすい

という点から、:okの方が全体に対するメリットが多いのではないかと思います。

とはいえ、「覚えられないのでリファレンス欲しいと思いましたので今回まとめました!

HTTPステータスコードのシンボル一覧

シンボル一覧.rb
100 :continue
101 :switching_protocols
102 :processing
103 :early_hints
200 :ok
201 :created
202 :accepted
203 :non_authoritative_information
204 :no_content
205 :reset_content
206 :partial_content
207 :multi_status
208 :already_reported
226 :im_used
300 :multiple_choices
301 :moved_permanently
302 :found
303 :see_other
304 :not_modified
305 :use_proxy
306 :unused
307 :temporary_redirect
308 :permanent_redirect
400 :bad_request
401 :unauthorized
402 :payment_required
403 :forbidden
404 :not_found
405 :method_not_allowed
406 :not_acceptable
407 :proxy_authentication_required
408 :request_timeout
409 :conflict
410 :gone
411 :length_required
412 :precondition_failed
413 :payload_too_large
414 :uri_too_long
415 :unsupported_media_type
416 :range_not_satisfiable
417 :expectation_failed
421 :misdirected_request
422 :unprocessable_entity
423 :locked
424 :failed_dependency
425 :too_early
426 :upgrade_required
428 :precondition_required
429 :too_many_requests
431 :request_header_fields_too_large
451 :unavailablefor_legal_reasons
500 :internal_server_error
501 :not_implemented
502 :bad_gateway
503 :service_unavailable
504 :gateway_timeout
505 :http_version_not_supported
506 :variant_also_negotiates
507 :insufficient_storage
508 :loop_detected
509 :bandwidth_limit_exceeded
510 :not_extended
511 :network_authentication_required

対応するヘルパーメソッド

ヘルパー一覧.rb
def invalid?;             status < 100 || status >= 600;        end

def informational?;       status >= 100 && status < 200;        end
def successful?;          status >= 200 && status < 300;        end
def redirection?;         status >= 300 && status < 400;        end
def client_error?;        status >= 400 && status < 500;        end
def server_error?;        status >= 500 && status < 600;        end

def ok?;                  status == 200;                        end
def created?;             status == 201;                        end
def accepted?;            status == 202;                        end
def no_content?;          status == 204;                        end
def moved_permanently?;   status == 301;                        end
def bad_request?;         status == 400;                        end
def unauthorized?;        status == 401;                        end
def forbidden?;           status == 403;                        end
def not_found?;           status == 404;                        end
def method_not_allowed?;  status == 405;                        end
def precondition_failed?; status == 412;                        end
def unprocessable?;       status == 422;                        end

def redirect?;            [301, 302, 303, 307, 308].include? status; end

おわりに

最後まで読んで頂きありがとうございました:bow_tone1:

どなたかの参考になれば幸いです:relaxed:

参考にさせて頂いたサイト(いつもありがとうございます)

150
116
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
150
116

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?