Użyj adresów URL, aby określić obiekty, a nie działania:
Zwróć uwagę, że to, o czym wspomniałeś, nie jest RESTful:
/questions/show/<whatever>
Zamiast tego do określenia obiektów należy użyć adresów URL:
/questions/<question>
Następnie wykonujesz jedną z poniższych operacji na tym zasobie.
OTRZYMAĆ:
Służy do uzyskiwania zasobu, wykonywania zapytań o listę zasobów, a także do wysyłania zapytań o informacje tylko do odczytu dotyczące zasobu.
Aby uzyskać zasób pytań:
GET /questions/<question> HTTP/1.1
Host: whateverblahblah.com
Aby wyświetlić wszystkie zasoby związane z pytaniami:
GET /questions HTTP/1.1
Host: whateverblahblah.com
POCZTA:
Służy do tworzenia zasobu.
Zwróć uwagę, że następujący błąd to:
POST /questions/<new_question> HTTP/1.1
Host: whateverblahblah.com
Jeśli adres URL nie został jeszcze utworzony, nie należy używać POST do jego tworzenia podczas określania nazwy. Powinno to spowodować błąd „Nie znaleziono zasobu”, ponieważ jeszcze nie istnieje. Najpierw należy umieścić zasób na serwerze. Możesz argumentować, że tworząc nowe pytanie, aktualizujesz również zasób / questions, ponieważ teraz zwróci ono jeszcze jedno pytanie na swojej liście pytań.
Powinieneś zrobić coś takiego, aby utworzyć zasób za pomocą POST:
POST /questions HTTP/1.1
Host: whateverblahblah.com
Zauważ, że w tym przypadku nazwa zasobu nie jest określona, ścieżka URL nowego obiektu zostanie zwrócona.
USUNĄĆ:
Służy do usuwania zasobu.
DELETE /questions/<question> HTTP/1.1
Host: whateverblahblah.com
POŁOŻYĆ:
Służy do tworzenia zasobu lub nadpisywania go podczas określania adresu URL zasobów.
W przypadku nowego zasobu:
PUT /questions/<new_question> HTTP/1.1
Host: whateverblahblah.com
Aby nadpisać istniejący zasób:
PUT /questions/<existing_question> HTTP/1.1
Host: whateverblahblah.com
... Tak, są takie same. PUT jest często opisywany jako metoda „edycji”, ponieważ zastępując cały zasób nieznacznie zmienioną wersją, edytowałeś to, co klienci otrzymają, gdy zrobią to później.
Korzystanie z REST w formularzach HTML:
Specyfikacja HTML5 definiuje GET i POST dla elementu formularza .
Atrybut zawartości metody jest wyliczonym atrybutem z następującymi słowami kluczowymi i stanami:
- Słowo kluczowe GET, mapujące na stan GET, wskazujące metodę HTTP GET.
- Słowo kluczowe POST, mapujące do stanu POST, wskazujące metodę HTTP POST.
Technicznie specyfikacja HTTP nie ogranicza Cię tylko do tych metod. Z technicznego punktu widzenia możesz dodawać dowolne metody, jednak w praktyce nie jest to dobry pomysł. Chodzi o to, że wszyscy wiedzą, że używasz GET do odczytywania danych, więc będzie to skomplikowane, jeśli zdecydujesz się zamiast tego użyć READ. To mówi...
ŁATA:
Jest to metoda zdefiniowana w formalnym dokumencie RFC. Jest przeznaczony do użycia, gdy chcesz wysłać tylko częściową modyfikację zasobu, będzie używany podobnie jak PUT:
PATCH /questions/<new_question> HTTP/1.1
Host: whateverblahblah.com
Różnica polega na tym, że PUT musi wysłać cały zasób, bez względu na to, jak duży jest on w porównaniu z tym, co faktycznie się zmieniło, podczas gdy PATCH możesz wysłać tylko zmiany.
Zakładając, że
/questions/10
jest to ważne pytanie, metoda jest używana do interakcji z nim.POST, aby dodać do niego
PUT, aby go utworzyć lub zamienić
POBIERZ, aby wyświetlić / zapytać
i DELETE, aby dobrze ... usunąć to.
Adres URL się nie zmienia.
źródło
Zamierzam wyjść na prostą i zgadnę, że masz na myśli standardowe kontrolery MVC, kiedy mówisz adresy URL „RESTful”, ponieważ twoje przykłady można uznać za inne niż „RESTful” (zobacz ten artykuł).
Ponieważ Railsy naprawdę spopularyzowały styl URL, którym wydajesz się być zainteresowany, poniżej przedstawiam domyślne akcje kontrolera utworzone przez ScaffoldingGenerator w Ruby on Rails. Powinien być znany każdemu, kto używa aplikacji Railsowej.
Zwykle można to skonstruować jako:
źródło
Oto mapowanie twoich obecnych adresów URL przy użyciu zasady REST:
Jeśli określisz pytanie jako zasób, powinno mieć unikalny adres URL. Używanie GET do wyświetlania (pobierania) jest powszechną praktyką. Staje się:
Teraz chcesz, aby użytkownik miał inny widok tego samego zasobu, który umożliwia mu edycję zasobu (być może za pomocą kontrolek formularza).
Dwie opcje tutaj, twoja aplikacja jest aplikacją (nie witryną internetową), wtedy możesz lepiej użyć JavaScript do przekształcenia zasobu w edytowalny zasób po stronie klienta.
Jeśli jest to witryna internetowa, możesz użyć tego samego adresu URL z dodatkowymi informacjami, aby określić inny widok, powszechną praktyką jest:
Ma to na celu zmianę pytania, więc PUT jest właściwą metodą do użycia:
Lista pytań jest w rzeczywistości nadrzędnym zasobem pytania, więc naturalnie jest to:
Teraz możesz potrzebować więcej:
Tada :)
źródło
Twoje cztery przykłady to:
Aby dodać pytanie:
Serwer odpowiedziałby:
źródło