1
1

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におけるRESTfulな設計とはなにか?

Posted at

#RESTfulとは

RESTful APIは、基本的に「RESTの原則」に従って実装されているWebシステムのHTTPでの呼び出しインターフェースのことを指します。

https://blog.api.rakuten.net/ja/jp-restful-api/#:~:text=REpresentational%20State%20Transfer%E3%81%AE%E7%95%A5,%E3%81%AE%E3%81%93%E3%81%A8%E3%82%92%E6%8C%87%E3%81%97%E3%81%BE%E3%81%99%E3%80%82

なるほど..わからん。

Railsの根本的なところやん?こんなに理解がぼんやりしていてええの?
ってことでこの曇った視界をはっきりさせていく。

#RESTful
アプリケーションを構成するリソースをHTTPリクエスト(GET/POST/PUT/DELETE)で作成、読み出し、更新、削除できる仕組み

要するに___URLに対してどのHTTPリクエストを送るかでそのあとの動作をより分けている___イメージか。


アプリケーションでユーザー関連のもろもろを取り扱うUserリソースを例にしてみる

アプリケーションの下記のような動作があったとする。

  • ユーザーを新しく登録するページを表示(new)
  • ユーザーを新しく作る(create)
  • 一人のユーザーを閲覧する(show)
  • 登録ユーザーの一覧をみる(index)
  • ユーザー情報を更新するページを表示(edit)
  • ユーザー情報を更新する(update)
  • ユーザーを消す(destroy)

これを冒頭でも述べた動作で振り分ける
ユーザーを新しく作るなら
HTTPリクエストは POST 
URLは/users
こうするとcreateアクションを呼び出すことができる。
※Railsではindex, show, new, edit, create, update ,destroyが暗黙のリクエスト

#RESTfulな設計を使うには

HTTPリクエスト、URL、アクションの設定はroutes.rbでできる。

post '/users', to: 'users#create'

ただUsersリソースのように想定している動作がindex, show, new, edit, create, update ,destroyの7種類全てを使う場合はroutes.rbで

resources :users

の1行を追加するだけで全てのアクションが使える。

#RESTfulな設計とは
・URLに対して、どのリクエスト(GET、POST、PUT、DELETE)かで結果が変わる仕組み

・routes.rbでその設定ができる。
・すべての挙動を想定している場合はresources :usersの一行でルーティング設定が終了する

#参考

https://wa3.i-3-i.info/word11405.html
https://qiita.com/kidach1/items/43e53811c12351915278
https://qiita.com/katsutakashima/items/47977b9e7d18cf816734
railsチュートリアル
Ruby on Rails 入門

1
1
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
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?