Uvízl jsem při navrhování URI pro vztah mezi mnoha uživateli a jinými zdroji. Konkrétně mám potíže předvídat důsledky různých přístupů.
Vzhledem k typům zdrojů user
a widget
(user
představuje registrovaného uživatele), ověřovaní (přihlášeni) uživatelé mají přístup pro zápis ke všem widgetům a hosté mají přístup pro čtení. Vztah mezi uživatelem a widgetem má také data (např. Počet úprav), která by v ideálním případě měla být také čitelná (tedy adresovatelná ) hosty (a - - jak podotýká Lèse níže , ostatní uživatelé). Příklady používají celá čísla pro jedinečné identifikátory kvůli přehlednosti.
Hosté si mohou prohlédnout widget č. 12 na adrese
/widgets/12
Jaké jsou důsledky různých možných URI pro autentizovaného uživatele # 34 pro čtení/zápis widgetu # 12, a volitelně pro hosta, aby si mohl přečíst relační data mezi nimi? (Nedělejte si starosti s úplnou odpovědí, jakákoli pozorování k nebo proti konkrétním možnostem by byla také velmi cenná).
/widgets/12
(uživatel je implicitní na základě autentizace, žádný způsob, jak pro hosta určit vztah mezi uživatelem a widgetem)
/users/34/widgets/12
(obě strany vztahu explicitní, implicitní hierarchie mezi zdroji)
/users/34/widgets/12 and /widgets/12/users/34
(stejné, bez hierarchie)
/user-widget/34,12
(vztah jako zdroj, explicitní, ale možná více, než uživatel potřebuje vědět)
Jsem rád, že mohu poskytnout více podrobností nebo přidat návrhy URI ostatních lidí. Stačí, když chcete, abych něco přidal.
Adresa URL pro přístup k widgetu by měla být stejná pro všechny. Řízení toho, co se má zobrazit nebo jaké schopnosti má uživatel, závisí na ID uživatele, které by se mohlo zachovat například v proměnné relace.
Když se tedy widget/12 načte, měla by vaše webová stránka zkontrolovat, kdo je uživatelské jméno v proměnné relace, zjistit, jaká jsou jejich oprávnění, a pak byste stránku naformátovali na základě těchto oprávnění.
Jak formulář /widgets/12
umožňuje hostům číst widgety - nebo umožňuje uživatelům číst widgety jiných uživatelů? Nebo plánujete implementaci více formulářů?
Osobně bych udělal něco jako:
/widget/id:12/user:665
/widget/12/665
/widget/12?user=665
Nakonec však na URL nezáleží, pokud se nejedná o něco, k čemu by uživatelé chtěli přistupovat přímo. Pokud se jedná pouze o místo pro vložitelný skript, zdroj dat nebo nějaký jiný typ služby, můžete použít libovolnou adresu URL, v takovém případě bych prostě chtěl použít něco jako:
/widget?id=12&uid=665
pravit:
Dávám přednost právě obsluhující widget pod /widget
, protože to je zdroj. Předpokládám, že vztah mezi uživatelem a widgetem je odvozen od typu widgetu, kterým je. Přidání users
do hierarchie cesty tedy není nutné.
Nyní, pokud chcete, aby lidé mohli procházet widgety konkrétního uživatele, byl by vhodnější formulář /users/34/widgets/12
.
Pokud jde o ověřování, nepředal bych ji vůbec přes URL. Co mi brání v tom, abych změnil ID uživatele v URL a získal povolení, která nemám?