2012-09-21 5 views
5

Większość REST tutoriale ułożone zasobów w następujący sposób:Projektowanie relaksującego adresy URL stron internetowych

GET /car/  -> list of cars 
GET /car/<id>/ -> info about specific car 
POST /car/  -> create a new car 

ale przy budowaniu aplikacji internetowych do wykorzystania w przeglądarkach, jest brakującym ogniwem, które są rzadko omawiane, przed wysłaniem do/samochód /, musisz zdobyć formularz do stworzenia nowego zasobu (samochód). Jaki powinien być adres URL tego formularza?

ja zwykle używane:

GET /car/new/ -> form for creating a new car 
POST /car/new/ -> redirect to /car/<id>/ if item is created else show form with invalid fields highlighted 

ale według http://www.slideshare.net/Wombert/phpjp-urls-rest to nie jest dobry REST URL. Rozumiem, dlaczego nie jest to dobry REST, ponieważ "nowy" jest naprawdę używany jako czasownik, a nie jako zasób, ale gdzie powinien być ten formularz, ponieważ GET /car/ jest już używany do wyświetlania samochodów, więc nie można użyć GET /car/ dla formularz dla nowych samochodów.

W skrócie, moje pytanie brzmi: "Jaki jest URL" RESTful "dla" tworzenia formularza zasobów "?"

W przypadku nieco pokrewnych informacji, nawet w usługach internetowych, czasami nie zawsze mądrze jest polegać na kliencie znającym schemat z wyprzedzeniem, dlatego nawet w usługach internetowych może istnieć potrzeba bycia sposobem dla klienta. zażądaj bieżącego schematu zasobu. AFAICS, jest to podobna sytuacja z koniecznością pobrania formularza tworzenia (tj. Formularz jest podobny do schematu opisującego sposób konstruowania zapytania POST do tworzenia zasobu). Czy moja linia myślenia jest tutaj poprawna?

+0

Nie udało się zdobyć tego wystarczająco! Nie ma dosłownie żadnej wzmianki o tym brakującym łączu w dowolnym miejscu, i niestety nie ma satysfakcjonującej odpowiedzi. – aefxx

Odpowiedz

2

REST nie przejmuje się zbytnio tym, jak wygląda Twój identyfikator URI, o ile identyfikuje jeden unikalny zasób i samoopisuje. Spełniaj te kryteria, a poza tym są to osobiste preferencje. Nic nie zabrania używania czasownika w URI, jeśli ma sens korzystanie z niego.

W odniesieniu do nieznacznie powiązanej notatki, wskazówka dotycząca formularza będącego schematem to: typ nośnika. Architektura RESTful dotyczy zarówno klienta, jak i serwera, obaj rozumieją typy mediów używane do reprezentowania stanu aplikacji.

odpocząć API powinien wydać prawie wszystkie jego opisowy wysiłku w określające typ (y) multimedialny używany do reprezentowania zasobów i jazda stanu aplikacji, lub w definiowaniu rozszerzonych nazw zależność i/lub znak hipertekstu z obsługą -up dla istniejących standardowych typów mediów. Dowolny wysiłek wydany przez firmę poświęcono opisywaniu, które metody, które należy zastosować w przypadku interesujących identyfikatorów URI , powinny być w pełni zdefiniowane w zakresie reguł przetwarzania dla rodzaju nośnika (oraz, w większości przypadków, już zdefiniowanego przez istniejące typy nośników ).

Czytaj więcej tutaj: http://roy.gbiv.com/untangled/2008/rest-apis-must-be-hypertext-driven

To Roy Fielding, człowieka, który zdefiniowany resztę. Ogólnie rzecz biorąc, typy multimediów powinny być rozszerzalne - to znaczy, że wszelkie zmiany powinny dodawać, a nie łamać starszych klientów, chyba że jest to konieczne.

+0

Domyślam się, że to, czego chcę, to przykład tego, jak inni rozwiązali ten problem (potrzeba formularza tworzenia GET) w adresie URL REST. Innym sposobem, którego użyłem, jest umieszczenie formularza kreacji na stronie/car/page (która byłaby doskonale URUCHOMIONA), ale z perspektywy użyteczności, która nie zawsze jest odpowiednia, jeśli na przykład/car/page jest już zbyt zatłoczona. –

+2

Jeśli zdefiniujesz trasę '/ cars /: id', a spróbujesz umieścić swój formularz w miejscu' '/ cars/new', nie możesz mieć samochodu o identyfikatorze" new "- coś, co ma być ostrożny z. Być może mógłbyś mieć coś w rodzaju '/ forms/add-new-car'. – tuespetre

2

Zawsze zakładałem, że "forma" jako taka nie jest zasobem, więc /<name>/new jest w porządku - formularze nie są zwykłymi elementami API. Autor slajdów umieścił to na "złej" liście, ale nie dostarczył poprawnej - zakładam, że był tak ZNIEKSZTAŁCONY, że zapomniał o takich przypadkach pomyśleć.

+0

Problem polega na tym, że '/ /new /' sugeruje, że '/ /new /' jest zasobem potomnym '/ /', podczas gdy od tego czasu '/ /new /' jest w rzeczywistości akcją na '/ /' –

+1

Zgadzam się, ale nadal - dostarczyłeś odpowiedź, dlaczego jest ona zła (co już wiem), a nie poprawna odpowiedź lub inna propozycja. Czy możesz dać nam nowe pomysły? –