Wpis z mikrobloga

Piszę (trochę sam dla siebie) REST API systemu na którym pracujemy w firmie i dla pobierania danych (GET) sprawa jest prosta - serwuję je w JSON. Ale właściwie, to jaka jest praktyka przy aktualizacji danych (PUT) lub zapisywaniu nowych (POST), jeśli chodzi o zwracaną treść? Jak to rozwiązujecie u siebie? Serwujecie wynik z aktualnymi danymi tak jakby ktoś je pobrał? Czy może prosta odpowiedź typu:

{ "result": 200 }
Jestem ciekaw jak to bywa w praktyce #programowanie
  • 14
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@lutecki: PUT do tworzenia, nie aktualizowania. PATCH masz do aktualizacji danych, których ID znasz. Tworzyć, aktualizować i inne operacje, możesz użyć POST.
  • Odpowiedz
@lutecki: @draxgar PUT do dodawania do relacji jeden do wielu. Zwracasz dodany rekord. POST do dodawania nowej encji w tabeli „glownej”. Zwracasz caly rekord. DELETE usuwasz, zwracasz tylko status, PATCH aktualizujesz to co dodales przez POST i zwracasz caly rekord
  • Odpowiedz
  • 0
Czyli:

/api/clients/:Id - GET pobieranie zawartości, POST aktualizacja, DELETE usuwanie
/api/clients - POST dodawanie nowego rekordu

Tak?
  • Odpowiedz
@draxgar: put jest do aktualizacji raczej, nie tworzenia ;-)

Można się między różnicami w PUT i Patch pochylić, ale co do zasady PUT aktualizuje cały obiekt, a Patch to aktualizacja fragmentu. Np. Mając np. API do przeczytanych książek - POST tworzysz rekord nowej książki, PUT aktualizujesz rekord bo np zrobiłeś literówkę w tytule (wysyłasz cały model z ID), a Patch to metoda MarkAsRead która ustawia tylko flagę książki na przeczytana,
  • Odpowiedz
co do zasady PUT aktualizuje cały obiekt


@nilphilus: https://www.rfc-editor.org/rfc/rfc9110.html#PUT:~:text=state%20of%20the%20target%20resource%20be%20created%20or%20replaced
tworzy, jak nie masz id, np.: put na /users, aktualizuje cały obiekt jak masz jego id, np.: put na /users/123. Pola które są puste zostaną wyczyszczone, w przeciwieństwie do patch, który zmieni tylko wysłane pola. Cieszę się, że znasz temat, ale nie rozumiem po co do mnie kierujesz te słowa. Nie jestem autorem posta, nie zrobiłem błędu.

jak już
  • Odpowiedz
PUT do tworzenia, nie aktualizowania. PATCH masz do aktualizacji danych, których ID znasz. Tworzyć, aktualizować i inne operacje, możesz użyć POST.


@draxgar: Kompletne pomieszanie z poplątaniem. PUT może być używany zarówno do tworzenia jak i do aktualizacji. Jeżeli zasób pod danym adresem nie istnieje, to PUT może taki zasób stworzyć. Jeżeli zasób istnieje, to PUT dokona jego aktualizacji. POST nie używa się do aktualizacji, a przynajmniej nie w API które
  • Odpowiedz
@tylko_zerknalem: nie będę na portalu ze śmiesznymi obrazkami pisał elaboratów. Odsyłam do mojego komentarza, który odsyła do źródła:

https://www.rfc-editor.org/rfc/rfc9110.html#PUT:~:text=state%20of%20the%20target%20resource%20be%20created%20or%20replaced


Tam masz wszystko, jak przyjęto w RFC.
Jak pisałem do twoich kolegów z elektrody: nie pisz do mnie, niczego mnie nie nauczysz, bo ja znam RFC. Pisz do twórcy posta, cytując mnie, uzupełniając. Moja wypowiedź nie była i nie będzie kompletna.
  • Odpowiedz
Odsyłam do mojego komentarza, który odsyła do źródła:


@draxgar: To co napisałeś w swoim pierwszym komentarzu nijak ma się do tego co jest w podlinkowanym przez Ciebie RFC. Dlatego stwierdziłem że warto to sprostować, żeby nie wprowadzać @lutecki w błąd. A jeżeli Twoje ego ma problem z tym że ktoś zweryfikował to co napisałeś i Cię poprawił to już Twoja sprawa. Jak widzisz nawet na portalu ze śmiesznymi obrazkami
  • Odpowiedz
@tylko_zerknalem: Fajnie, że próbujesz nauczyć czegoś autora wątku, super. Tylko kieruj słowa do niego, bo jak już mówiłem, mnie niczego nie nauczysz. Znam rest i zasady, projekty pokazują, że mają się nijak do rzeczywistości. Jasne, fajnie dążyć do wzorca, ale rzeczywistość rzeczywistością. Good job, keep up the good work. :pat pat: @tylko_zerknalem. Tylko cel obierz poprawny, nie mnie.
  • Odpowiedz