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



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



All Articles