Trasy a Zdroje

Základní Směrování Konvence

Pojďme se podívat na naše cesty tak, jak jsou nyní, s použitím rake routes:

$ rake routes Prefix Verb URI Pattern Controller#Action list_posts GET /list_posts(.:format) application#list_posts GET /show_post/:id(.:format) application#show_post new_post GET /new_post(.:format) application#new_post create_post POST /create_post(.:format) application#create_post GET /edit_post/:id(.:format) application#edit_post POST /update_post/:id(.:format) application#update_post POST /delete_post/:id(.:format) application#delete_post POST /create_comment_for_post/:post_id(.:format) application#create_comment POST /list_posts/:post_id/delete_comment/:comment_id(.:format) application#delete_comment list_comments GET /list_comments(.:format) application#list_comments 

Jedním z klíčových poznatků pro Kolejnice úmluv je, že data-centric aplikace (nebo CRUDy aplikace), mají tendenci mít velmi podobné způsoby pro umožňuje uživatelům komunikovat s aplikací, které jsou:

  • stránku pro zobrazení seznamu něco,
  • zobrazit
  • zobrazí formulář pro vytvoření nové instance něco,
  • skutečně vytvořit něco,
  • zobrazí formulář pro editaci instanci něco,
  • aktualizovat
  • odstranit

Těch sedm „vzory interakce“ jsou tak běžné, že Kolejnice poskytuje silnou set úmluv, z směrování řadiče, názory a formy pomoci, aby tyto pracovní postupy jednodušší. Teď se zaměříme na směrování.

Pro směrování, úmluvy je, že místo toho, abychom museli přijít s vzory adres URL, Kolejnice doporučuje struktury adres Url a odpovídajícího správce akce, a to následujícím způsobem:

Workflow HTTP CESTA Správce Akce
Zobrazení seznamu příspěvků /příspěvky příspěvky#index
Zobrazit příspěvek /příspěvky/:id příspěvky#show
Zobrazit stránku vytvořit příspěvek /příspěvky/new příspěvky#nové
Vytvořit příspěvek POST /příspěvky příspěvky#vytvořit
Zobrazit stránku upravit příspěvek /příspěvky/:id/edit příspěvky#upravit
Aktualizace post /PATCH /příspěvky/:id příspěvky#update
Smazat příspěvek, ODSTRANIT /příspěvky/:id příspěvky#zničit

můžeme změnit post část naší současné směrování postupujte podle této úmluvy:

# posts GET /list_posts -> GET /posts posts#index GET /show_post/:id -> GET /posts/:id posts#show GET /new_post -> GET /posts/new posts#new POST /create_post -> POST /posts posts#create GET /edit_post/:id -> GET /posts/:id/edit posts#edit POST /update_post/:id -> PUT/PATCH /posts/:id posts#update POST /delete_post/:id -> DELETE /posts/:id posts#destroy 

A v routes.rb soubor,

Rails.application.routes.draw do ### posts ### get '/posts' => 'posts#index' get '/posts/new' => 'posts#new' get '/posts/:id' => 'posts#show' post '/posts' => 'posts#create' get '/posts/:id/edit' => 'posts#edit' patch '/posts/:id' => 'posts#update' put '/posts/:id' => 'posts#update' delete '/posts/:id' => 'posts#destroy' # comments later.. ... end 

Všimněte si, že se tento nový vzor, tam je hodně méně sloves v samotné URL, ale spoléháme na slovesa HTTP (GET/POST/PUT/PATCH/DELETE) k napájení sémantika pro jinak stejné vzory adres URL, například /posts/:id.

Všimněte si, že PUT byl použit pro aktualizaci zdrojů až do nedávné doby, kdy PATCH byl určen jako lepší sémantická shoda pro tuto akci. Od té doby se Rails přesunul na preferování PATCH, ale umožnil oběma slovesům aktualizace.

Další změny uvidíme později, je, že budeme směrování všechny adresy Url související s příspěvky na PostsController místo toho, manipulaci vše, co je v ApplicationController. PostControllerakční jména

  • nový
  • index
  • zobrazit
  • vytvořit
  • upravit
  • aktualizovat
  • destroy

jsou také úmluvy, odpovídající 7 vzory interakce.

Toto je nejsilnější soubor konvencí, které vám Rails ukládá jako vývojář aplikací. Požádáme vás, abyste se snažili zapamatovat si to. V celé knize se k tomu mnohokrát vrátíme, abychom vám to také pomohli.

směrování pro více zdrojů

často potřebujeme mít více zdrojů přítomných v URL. Například pro naši blogovou aplikaci kdykoli potřebujeme mít cestu k vytvoření komentáře, je velmi důležité, abychom věděli, na kterém příspěvku je tento komentář vytvořen.

v současné době to děláme:

post 'create_comment_for_post/:post_id' => 'application#create_comment' 

konvence Rails URL s více přidruženými prostředky je začít s“ obsahujícím „zdrojem až k“ nejvnitřnějšímu “ zdroji. Například, naše trasy pro komentáře by změna:

post '/posts/:id/comments' => 'comments#create' delete '/posts/:post_id/comments/:id' => 'comments#destroy' get '/comments' => 'comments#index' 

sémantika těchto Url představují: „Vytvořit komentář pod konkrétní post“ a „smazat komentář pod konkrétní post“. Poslední trasa, „Zobrazit všechny komentáře v systému“, nemusí být“ rozsahem „pod příspěvkem, takže URL nemusí vést s „/ posts“.

Pokud potřebujeme více zdrojů v URL s jejich Id, konvence je taková, že poslední zdroj bude používat zástupný symbol :id a všechno ostatní bude :resource_id jako :post_id.

Restful

REST je zkratka pro „Representational State Transfer“. Je to styl softwarové architektury a vodítko pro vytváření škálovatelných webových služeb. REST, jako způsob struktury webových aplikací, má mnoho aspektů, ale podívejme se, jak se to týká rozhraní, které používáme k interakci s webovými aplikacemi, adresami URL.

Chcete-li vidět, jak REST zjednodušuje sémantiku adres URL, projděme si příklad. Řekněme, že budujeme online službu objednávání pizzy. Naivní implementace rozhraní služby (Url) by:

/check_order?order_id=2 /place_new_order /pizza_details?type=1 /pay_for_my_order?order_id=12 /cancel_order?order_id=3 /expedite_order?order_id=13 

Klidný design rozhraní bude vypadat takto:

GET /orders/2 POST /orders GET /pizzas/1 POST /orders/12/payments DELETE /orders/3 POST /orders/13/expeditions 

můžete vidět, RESTful rozhraní centra kolem „podstatná jména“ nebo „zdroje“, odstranění „slovesa“ z rozhraní, ale místo toho se spoléhá na standardizované slovesa HTTP (GET/POST/PUT/DELETE) k napájení CRUD sémantika pro akce. Slovesa jako check, place, cancel jsou mapovány přímo na HTTP slovesa GET načíst, POST vytvořit DELETE zničit zdroj order. pay a expedite jsou strukturovány jako vytvoření (HTTP POST) dílčích zdrojů payments a expeditions pod zdrojem orders.

RESTful interfaces standardizované vzory interakce webových aplikací, které jim usnadňují pochopení a programování. Protože rozhraní jsou soustředěna kolem manipulace se zdroji, odpovědi jsou mnohem předvídatelnější. Analogie toho, jak Klidný architektury vzor zjednodušuje interakci s webovými službami by být, jak Relační Databáze a jazyk SQL zjednodušuje ukládání dat. Než Relační Databáze a SQL, data byla obvykle uloženy v proprietárním systémům s konkrétní logiky, komunikovat s nimi, to znamená, že na každém projektu byste se naučit jinou sadu instrukcí pro interakci s daty. Relační Databáze a SQL dal společnou strukturou dat (datové záznamy jako řádky a sloupce uloženy v tabulkách) a soubor společných rozhraní – čtyři jednoduché slovesa SELECT, INSERT, UPDATE a DELETE že může podporovat všechny typy aplikací.

přijetí klidného rozhraní pro Vaši webovou aplikaci také zefektivní vaši aplikaci tak, aby odpovídala tomu, jak jsou data backendu uložena v databázích, a usnadňuje vývoj. To uvidíme v následujících kapitolách.

zápis prostředků

mluvili jsme o konvencích směrování Rails a klidných vzorcích URL. Nyní naše routes.rb soubor by vypadat jako následující:

### config/routes.rb ### Rails.application.routes.draw do ### posts ### get '/posts' => 'posts#index' get '/posts/new' => 'posts#new' get '/posts/:id' => 'posts#show' post '/posts' => 'posts#create' get '/posts/:id/edit' => 'posts#edit' patch '/posts/:id' => 'posts#update' put '/posts/:id' => 'posts#update' delete '/posts/:id' => 'posts#destroy' ### comments ### get '/comments' => 'comments#index' post '/posts/:id/comments' => 'comments#create' delete '/posts/:post_id/comments/:id' => 'comments#destroy' end 

Ve skutečnosti, trasy, jako to, co máme v posts sekce jsou velmi časté, takže Kolejnice poskytuje speciální resources notace, která pomáhá vytvářet ty pro vás.

můžeme jednoduše udělat:

resources :posts 

tento řádek automaticky vygeneruje 8 řádků, které jsme měli dříve. Všimněte si, že pro akci update umožňuje Rails z důvodů kompatibility sloveso PUT i PATCH.

v prostředí příkazového řádku můžete spustit bundle exec rake routes a ověřit, zda generuje přesně stejnou sadu tras.

Všimněte si, že tato jediná linka vygeneruje 8 tras. V našem případě se stalo, že potřebujete všechny trasy, ale pokud potřebujete pouze část trasy, můžete definovat více explicitně jako:

resources :posts, only: 

Tento řádek výše by generovat pouze 3 trasy pro tebe – typ bundle exec rake routes podívat se na to.

Vnořené Zdroje

Kolejích také nám umožňuje hnízdo zdroje k vytvoření vzory adres URL s více zdrojů, viz níže:

### config/routes.rb ### Rails.application.routes.draw do resources :posts do resources :comments, only: end resources :comments, only: :index end 

Run bundle exec rake routes a podívejte se na výstup – to by mělo být stejné jako to, co jsme měli předtím.

pomocníci cest

při spuštění bundle exec rake routes si všimněte sloupce Prefix pro některé z těchto tras. Jsou zde, aby nám pomohli vědět, jak používat pomocníky poskytnuté kolejnicemi pro naše trasy. Můžeme použít tyto předpony následované _path v našich řadičích a pohledech pro snadné vytváření cest.

například:

posts_path # => '/posts' post_id = 123 post_comments_path(post_id) # => '/posts/123/comments' 

jaká je výhoda použití pomocníků URL, spíše než tvrdé kódování cest, jako je /posts/123/comments přímo ve vašem kódu? (například ve vaší akci řadiče?) Důvod, proč chcete použít cestu pomocníků je, že pokud chcete změnit vzory adres URL v aplikaci, je to mnohem jednodušší použít URL pomocníky pro návrat jinou cestou – pojďme se podívat na příklad:

get '/register', to: 'users#new', as: 'register' 

Když jsme se přidat „jako“ klauzule na této trase, pokud spustíte bundle exec rake routes uvidíte Prefix sloupec register, a můžete použít register_path /register cestu. Nyní, pokud chceme změnit cestu na /login, vše, co musíme udělat, je jen:

get '/login', to: 'users#new', as: 'register' 

nyní nám naše register_path dává /login. Nemusíme měnit náš kód v aplikaci Rails vůbec.

Více Směrování Konvence

Než budeme pokračovat, pojďme se rychle podívat na několik variací, jak jsme již viděli, stejně jako některé další funkce jsou k dispozici, aby nám v Rails routing:

### config/routes.rb ### Rails.application.routes.draw do # pointing our homepage (root path) to posts#index root to: 'posts#index' # `match` & `via:` allow us to define one route and use several HTTP verbs # `as:` lets us define the name of the route prefix match '/authors/:id' => 'authors#update', via: , as: :update_author # update_author PUT|PATCH /authors/:id(.:format) authors#update resources :posts do # define extra params to pass for requests to a route get 'popular', on: :collection, action: :index, popular: true # popular_posts GET /posts/popular(.:format) posts#index {:popular=>true} get 'preview', on: :member # ... end # we can even use routes to redirect get '/home', to: redirect('/') end 

Pojďme rozebrat všechny funkce uvedené výše, jeden po druhém.

  • root: root se používá k určení, jaké akční mapy na „/“(nejvyšší úroveň URL našeho webu, která nemá cestu).Kořenová adresa URL vašeho webu / aplikace je nejčastěji používaná, proto by měla být uvedena root v horní části souboru tras.

  • zápas + přes: match se používá k přiřazení vzorů URL k jedné nebo více trasám. Můžeme také určit, které HTTP sloveso může být použito pro shodu s adresou URL s tímto vzorem. Děláme to tak, že předáme hash metodě match. Klíč pro tento hash je via a hodnota je pole sloves HTTP. match je obecnější forma některých běžně používaných metod směrování HTTP, jako jsou get, post a delete. To může trvat všechny stejné možnosti jako tyto metody, ale, ve srovnání s těmito metodami, dává trochu větší flexibilitu.
    například pomocí match můžeme zadat adresu URL, která odpovídá dvěma různým trasám, z nichž každá odpovídá dvěma různým slovesům HTTP. Normálně by to vyžadovalo dva příkazy místo jednoho. Můžeme to vidět z našeho příkladu výše, kde porovnáme vzor URL '/authors/:id' s akcí 'authors#update'. Poté určíme, jaká slovesa HTTP mohou být použita k vydání požadavku na tuto adresu URL s via: . Při použití match vždy zadejte metodu HTTP, pokud tak neučiníte, může to mít negativní dopad na bezpečnost vaší aplikace.
    match představuje další možnost směrování na určité akce v kolejnicích. Obecně je nejlepší držet se běžně používaných metod HttpHelpers, jako jsou get a post.

  • as: o něco dříve jsme zmínili, že volba as: může být použita s deklarací trasy ke změně předpony pro naše pomocníky URL. To lze použít různými způsoby. Můžeme použít as:, aby naši pomocníci URL lépe odpovídali vlastním adresám URL. Dalším použitím je změna aktuálního pomocníka cesty URL na něco intuitivnějšího nebo na něco, co lépe odpovídá zdrojům v aplikaci.

  • trasa sběru: podívejte se, jak nahoře hnízdíme naši trasu /popular pod zdroj posts. Poté použijeme on: :collection k určení, pod jakou část zdroje tuto trasu vnořujeme. Máme mnoho příspěvků, takže je považován za sbírku. Zadáním on: :collection říkáme: „shoda adresy URL s cestou /posts/popular.“Pokud jsme nepřidali on: :collection, Rails předpokládají, že tato trasa odpovídá jinému zdroji spojenému s jedním členem naší sbírky příspěvků. V tom případě by se naše trasa stala /posts/:id/popular. Můžeme také určit více tras sběru pomocí formátu bloku.

collection do get 'popular' end 
  • absolvování další parametr: můžeme zadat výchozí parametr, který vždy dostane prošel s naším params hash, když jsme uzavřeno s některými Url. Existují dva způsoby, jak to určit; jeden způsob je stejný jako výše:
get 'popular', on: :collection, action: :index, popular: true 

popular: true bude předán naší akci, se kterou se oblíbená trasa shoduje pomocí hash params. Bude mít klíč :popular a hodnotu true. Můžeme také použít více explicitní syntaxe při průchodu hash naší trase metoda get, kde klíčem je defaults: a hodnota je další hash obsahující název parametru chceme předat naše akce.

get 'popular', on: :collection, action: :index, defaults: { popular: true} 
  • členská trasa: Pomocí on: member můžeme určit, že naše trasa odpovídá členovi kolekce. Pokud to použijeme, dynamický segment se zobrazí jako :id. Pomocník URL bude také vytvořen jako preview_post. Zadáním této trasy pomocí on: member říkáme Rails, že se jedná o člena tohoto konkrétního zdroje. Že to není jen další zdroj vnořený pod příspěvky, ale těsněji propojený nebo související s našimi příspěvky v této aplikaci. Více členských tras může být definováno pomocí formátu bloku; tento formát používá stejnou syntaxi jako formát bloku pro definování více tras sběru, stačí nahradit collection member.

  • přesměrování: existuje ještě jeden koncept, o kterém se mluví, který je zobrazen v našem příkladu výše, a to je přesměrování. Rails nám dává možnost přesměrovat z jedné cesty na druhou pomocí redirect helper ve spojení s trasou.get '/home', to: redirect('/'). Pokud se někdo pokusí o přístup k cestě /home, bude okamžitě přesměrovánna kořenovou cestu /. To samozřejmě není omezeno pouze na jednu cestu URL; mohli bychom mít také něco takového: get '/home', to: redirect('/travel').

přezkoumání

kolejnice trasy stojí v přední části aplikace. Trasa interpretuje příchozí požadavek HTTP a:

  • odpovídá požadavek, aby správce akce na základě kombinace HTTP a URL požadavku vzor
  • zachycuje data v URL bude k dispozici v params v řadiči akce
  • Rails podporuje vývojářům používat Uklidňující vzory adres URL při nastavování trasy, s konceptualizace manipulace zdroje s HTTP slovesa.
  • pomocí makra resources můžete velmi rychle generovat klidné trasy.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.