RESTfulルーティング

ルートに関する以前の記事では、まだ何も書いていませんが、 IskinはRESTfulルーティングについて何も書いていないことに気付きました。 これは、鉄道配線の非常に重要な部分です。 RESTの全体像はありませんでした。ここから引き裂かれるのは一般的なアイデアだけです。 そこで、私はそれをより徹底的にとることに決めました。

多くの文献がありますが、おそらく翻訳されていません。 そして、私が見たスクリーンキャストがいくつかあります:
スクリーンキャスト#35「カスタムRESTアクション」(Ryan Bates作)
Bala Paranzhaによる「RESTful Rails」のスクリーンキャスト93は、より徹底的であり、大学での1時間の講義です。 彼はインド英語も持っています=)。
RESTに関する記事の優れた翻訳

'/>

REST


REpresentational State Transfer of Resources
簡単にするために、これを定式化します。これはリンクを整理するこのようなシステムです。 また、リンクはクライアントサーバーリクエストです。 そして、リクエストは主にHTTPメソッドです!

RESTは単なる参照システムではありませんが、Railsでの実用的なアプリケーションは、クエリを作成してリソースを操作するだけです。

昔は、リンクでリクエストメソッドを示すことは(フォームで-別の問題であり、GETとPOSTに限定されていました)私には決して起こりませんでした。 今、私たちを助けるために、(もちろん、以前に)4つのHTTPメソッド:GET、POST、PUT、DELETEがあります。 現在、主要なものはコントローラーメソッドではなく、HTTPメソッドです。

もう1つのニュース:これ以上URLはありません。 ここで、URI-Uniform Resource Identifier-リソースへのリンクを使用します。 RESTfulパスは、URIおよびHTTPメソッドの指標です。

たとえば、リソースがあります-本。 各本には一意のIDがあります。 インスタンスのデータを削除、表示、更新するリンク(c ID = 1など)は次のようになります。

mysite/books/1

しかし、プログラムは、実行する3つのアクションのどれをどのように理解しますか? これは、URIを支援するHTTPメソッドの出番です。

GET mysite / books / 1-ID = 1の本に関する情報を表示します
POST mysite / books / 1-書籍情報を更新します
DELETE mysite / books / 1-本を削除する

レールリンクは、次のようになります(削除するなど)。

<%= link_to 'Delete book', book_url(ID), :method => :delete %>

魔法


そのようなルートは空中からではなく、routes.rb構成ファイルに記録されます。

#routes.rb
map.resources :books

この短い行により、7つの標準ルートが作成されます。
 #HTTP path_varパスアクション
   GET books_path /書籍インデックス
   GET book_path(id)/ books / id show
   GET new_book_path / books / new new
   POST books_path / books create
   GET edit_book_path(id)/ books / id / edit edit
   PUT book_path(id)/ books / id update
   DELETE book_path(id)/ books / id destroy 

Bala Paranzhは、RESTfulルートを提案として理解することを提案しています。
書籍のリストを表示:GET books_path = GET / books
ID = 1の書籍の編集フォームを表示します:GET edit_book_path(1)= GET / books / 1 / edit
ブック1の削除:book_pathの削除(1)= DELETE / books / 1
ブック1のデータの更新:PUT book_path(1)= PUT / books / 1
など

別のメソッドを作成する場合はどうなりますか。 たとえば、アンティークの方法では、カタログから古代のトレアンのリストが得られます。 その結果、フォームのリンクを取得したい
 #HTTP path_varパスアクション
   GET antique_books_path / books / antique antique 

リソースには次の2つのオプションがあります::メンバーおよび:コレクション。 この場合、メソッドはコレクション(書籍のリスト(つまり、1冊でも返さないかもしれないが、多くの書籍))を機能させる(返す)ため、コレクションオプションを使用します。 さらに、アンティーク_がリストを返すので、HTTP GETメソッドを使用する必要があります。 これを理解するのが難しい場合は、類推して進めることができます。このメソッドは基本的にインデックスメソッドと同じです。つまり、HTTPメソッドは同じでなければなりません。

#routes.rb
map.resources :books, :collection => { :antique => :get }


さらに2つのメソッドを作成します。
火-すべてのトイレを燃やす
repeblish-本を再発行する
その後、ルートは次のようになります。

#routes.rb
map.resorces :books, :collection => { :antique => :get, :fire => :delete}, :member => { :republish => :put }


 #HTTP path_varパスアクション
   GET antique_books_path / books / antique antique
   DELETE fire_books_path / books fire
   PUT book_path(id)/ books / id republish 

再公開でPUTメソッドが使用されるのはなぜですか? データを更新するため(更新のアナログ)
fire_books_pathがDELETEメソッドを使用しているのはなぜですか? 削除するため(アナログ破棄)

ウォームアップ


それでは、次のリンクを見て、それらがRESTfulではない理由と、それらをRESTfulにする方法について考えてみましょう。

1. GET /books/edit
2. DELETE /books/1/update
3. DELETE /books/1/destroy


1.何かを編集している場合、IDを示す必要があります(すべてがリソースへのリンクであることを忘れないでください!URI!)。 したがって、次のように書くのが正しいでしょう。
取得/書籍/ 1 /編集

2.データを更新するには、DELETEではなくPUTメソッドを使用します。 そのためにはHTTPメソッドの指示で十分であるため、更新メソッドを指すことは不要です。
置く/本/ 1

3.繰り返しますが、コントローラーメソッドの指定は不要です。
削除/書籍/ 1

そして、ここで何が欠けているかを議論しましょう=)

Source: https://habr.com/ru/post/J45458/


All Articles