DRF, prawidłowe podejście do akcji

2

W DRF mam model Post, który można polubić za pomocą zarejestrowanej w widoku akcji pod url /api/posts/{id}/like/. Na pewnym discordzie związanym głównie z frontem, zadałem pytanie, co powinno być w response zgodnie z dobrymi praktykami, a koniec końców mój rozmówca nadmienił mi, że w url powinno być /likes. Wynikła z tego długa dyskusja, bo zamiast to uargumentować, to tylko odpowiadał pytaniem na pytanie, zamiast napisać wprost. Wiem, że zgodnie z zasadami/wzorcem REST, endpoint powinien wskazywać na zasób, a nie czynność, którą wykonuje, ale moje rozumowanie odwołuje się do przykładu akcji z dokumentacji DRF, gdzie jest zarejestrowany endpoint pod takim url http://localhost:8000/api/users/1/set_password, gdzie endpoint też wskazuje na to, jakie działanie wykonuje. Żeby wyjaśnić sytuację, zadałem to pytanie na oficjalnym discordzie Django i tam też optowali za moim rozwiązaniem. Wiem, że endpoint nie musi być związany z modelem, ale moje rozumowanie do wyglądu tej akcji opiera się na tym, że ten endpoint dodaje lub usuwa rekord w many to many field w modelu Post, a nie odwołuje się do osobnego modelu Like. Które rozwiązanie jest waszym zdaniem poprawne i dlaczego?

1

Nie ma znaczenia. Twój restowy serwis to jeden wielki mutowalny obiekt. To czy wywołanie będzie wyglądać:

obj.set_password(1, "haslo123")

czy

obj.get_user(1).set_password("haslo123")

nie ma większego znaczenia.

Ma znaczenie dopiero, gdy konwencja jaka stosujesz na serwerze pokrywa się z konwencją jaka otrzymujesz w jakimś generycznym kliencie. Wówczas jest mniej pracy, bo opierasz się na ogólnych założeniach.

1 użytkowników online, w tym zalogowanych: 0, gości: 1