de-vraag
  • Pytania
  • Tagi
  • Użytkownicy
Powiadomienia
Nagrody
Rejestracja
Po zarejestrowaniu się, będziesz otrzymywać powiadomienia o odpowiedziach i komentarzach do swoich pytań.
Zaloguj się
Brak tłumaczeń pasujących do Twojego wyszukiwania Jeśli masz już konto, zaloguj się, aby sprawdzić nowe powiadomienia.
Za dodane pytania, odpowiedzi i komentarze przewidziane są nagrody.
Więcej
Źródło
Edytuj
 alex
alex
Question

PUT vs. POST w REST

Zgodnie ze specyfikacją HTTP/1.1 Spec:

Metoda POST jest używana do żądania, aby serwer źródłowy zaakceptował encję załączoną w żądaniu jako nową jednostkę podrzędną zasobu identyfikowanego przez Request-URI w Request-Line.

Innymi słowy, POST służy do tworzenia.

Metoda PUT żąda, aby załączony podmiot został zapisany pod podanym Request-URI. Jeśli Request-URI odnosi się do już istniejącego zasobu, dołączona encja POWINNA być uważana za zmodyfikowaną wersję tej, która znajduje się na serwerze źródłowym. Jeśli Request-URI nie wskazuje na istniejący zasób, a ten URI może być zdefiniowany jako nowy zasób przez żądającego agenta użytkownika, serwer inicjujący może utworzyć zasób z tym URI."

To znaczy, że PUT jest używany do tworzenia lub aktualizacji.

Więc, który z nich powinien być używany do tworzenia zasobu? Lub jeden musi obsługiwać oba?

5202 2009-03-10T14:25:20+00:00 3
Peter Mortensen
Peter Mortensen
Edytowane pytanie 22. lipca 2017 в 11:39
Programowanie
rest
http
post
put
To pytanie ma 1 odpowiedź w języku angielskim, aby je przeczytać zaloguj się na swoje konto.
Solution / Answer
Brian  R. Bondy
Brian R. Bondy
10. marca 2009 в 2:29
2009-03-10T14:29:46+00:00
Więcej
Źródło
Edytuj
#8886078

Ogółem:

Zarówno PUT jak i POST mogą być użyte do tworzenia.

Musisz zapytać "do czego wykonujesz akcję?"", aby odróżnić, czego powinieneś użyć. Załóżmy, że projektujesz API do zadawania pytań. Jeśli chcesz użyć POST to zrobisz to do listy pytań. Jeśli chcesz użyć PUT to zrobisz to dla konkretnego pytania.

Obie metody mogą być użyte, więc której z nich powinienem użyć w moim projekcie RESTful:.

Nie musisz obsługiwać zarówno PUT jak i POST.

To, który z nich jest używany, zależy od Ciebie. Ale pamiętaj, aby użyć właściwego w zależności od tego, do jakiego obiektu odwołujesz się w żądaniu.

Kilka uwag:

  • Czy nazywasz swoje obiekty URL, które tworzysz jawnie, czy pozwalasz serwerowi zdecydować? Jeśli nadajesz im nazwę, to użyj PUT. Jeśli pozwolisz serwerowi zdecydować, użyj POST.
  • PUT jest idempotentny, więc jeśli PUT obiekt dwa razy, to nie ma to żadnego efektu. Jest to fajna właściwość, więc używałbym PUT kiedy to tylko możliwe.
  • Możesz aktualizować lub tworzyć zasoby za pomocą PUT z tym samym adresem URL obiektu.
  • Z POST możesz mieć 2 żądania przychodzące w tym samym czasie dokonujące modyfikacji adresu URL, i mogą one aktualizować różne części obiektu.

Przykład:

Napisałem poniższe jako część innej odpowiedzi na SO dotyczącej tego:

POST:.

Służy do modyfikowania i aktualizowania zasobu

POST /questions/ HTTP/1.1 Host: www.example.com/

Zwróć uwagę, że poniższe jest błędem:

POST /questions/ HTTP/1.1 Host: www.example.com/

Jeśli adres URL nie jest jeszcze utworzony, nie powinieneś nie powinieneś używać POST do jego utworzenia podczas określania nazwy. Powinno to skutkować błędem 'resource not found'. ponieważ <new_question> nie istnieje jeszcze. Powinieneś PUTować <new_question> na serwerze. zasób na serwerze jako pierwszy.

Możesz jednak zrobić coś takiego jak to, aby utworzyć zasoby używając POST:

POST /questions HTTP/1.1 Host: www.example.com/

Zauważ, że w tym przypadku zasób nazwa nie jest określona, nowe obiekty ścieżka URL zostanie zwrócona do Ciebie.

PUT:

Służy do tworzenia zasobu, lub nadpisać go. Podczas gdy określasz zasobów nowy adres URL.

Dla nowego zasobu:

PUT /questions/ HTTP/1.1 Host: www.example.com/

Aby nadpisać istniejący zasób:

PUT /questions/ HTTP/1.1 Host: www.example.com/

 Community
Community
Edytowana odpowiedź 23. maja 2017 в 11:55
4103
0
Tim Sullivan
Tim Sullivan
10. marca 2009 в 2:28
2009-03-10T14:28:57+00:00
Więcej
Źródło
Edytuj
#8886077

Użyj POST do tworzenia, i PUT do aktualizacji. Tak w każdym razie robi to Ruby on Rails.

PUT    /items/1      #=> update
POST   /items        #=> create
Peter Mortensen
Peter Mortensen
Edytowana odpowiedź 16. września 2017 в 8:17
124
0
J&#246;rg  W Mittag
Jörg W Mittag
10. marca 2009 в 3:27
2009-03-10T15:27:52+00:00
Więcej
Źródło
Edytuj
#8886079

REST jest bardzo wysokopoziomową koncepcją. W rzeczywistości, nawet nie wspomina o HTTP w ogóle!

Jeśli masz wątpliwości, jak zaimplementować REST w HTTP, zawsze możesz zajrzeć do specyfikacji [Atom Publication Protocol (AtomPub)][1]. AtomPub to standard pisania RESTful webservices za pomocą HTTP, który został opracowany przez wielu luminarzy HTTP i REST, z pewnym wkładem Roya Fieldinga, wynalazcy REST i (współ)wynalazcy samego HTTP.

W rzeczywistości, możesz nawet użyć AtomPub bezpośrednio. Choć powstał on w społeczności blogerów, nie jest w żaden sposób ograniczony do blogowania: jest to ogólny protokół do interakcji REST z dowolnymi (zagnieżdżonymi) kolekcjami dowolnych zasobów poprzez HTTP. Jeśli możesz reprezentować swoją aplikację jako zagnieżdżoną kolekcję zasobów, możesz po prostu użyć AtomPub i nie martwić się o to, czy użyć PUT czy POST, jakie kody statusu HTTP zwrócić i wszystkie te szczegóły.

Oto co AtomPub ma do powiedzenia na temat tworzenia zasobów (sekcja 9.2):

Aby dodać członków do kolekcji, klienci wysyłają żądania POST do URI kolekcji.

 Xan
Xan
Edytowana odpowiedź 27. lipca 2018 в 2:37
65
0
Dodaj pytanie
Kategorie
Wszystkie
Technologia
Kultura / Rekreacja
Życie / Sztuka
Nauka
Profesjonalny
Biznes
Użytkownicy
Wszystkie
Nowy
Popularny
1
365
Zarejestrowany 1 dzień temu
2
True Image
Zarejestrowany 1 dzień temu
3
archana agarwal
Zarejestrowany 3 dni temu
4
Maxim Zhilyaev
Zarejestrowany 6 dni temu
5
adambotsfford adambotsfford
Zarejestrowany 1 tydzień temu
BG
DA
DE
EL
ES
FI
FR
ID
IT
JA
KO
LT
LV
NL
PL
PT
RU
SL
SV
ZH
© de-vraag 2022
Źródło
stackoverflow.com
na podstawie licencji cc by-sa 3.0 z przypisaniem