Cześć, mam małe pytanka co do projektowania API
Robię w ramach nauki taką apkę do czatowania, gdzie user ma dostęp do kanału (serwera), na których są wyświetlane pokoje zawierające konwersacje (wiadomości)
To wszystko wyświetlane w przeglądarce
Mam na razie m.in. takie endpointy:
GET /rooms/{id}/messages - pobiera konwersację dla danego pokoju
POST /rooms/{id}/messages - wysyła wiadomość na danym pokoju
Teraz chciałbym aby po zalogowaniu na początek wyświetlał się userowi pokój, na którym ma najwięcej nowych wiadomości
Czy powinno to być zrobione:
- w ramach już istniejącego endpointa GET /rooms/{id}/messages
- czy dorobić jakiś nowy, który na podstawie parametru userId zwróci pokój z wiadomościami (tylko jak nazwać?)
Opcja pierwsza wydaje się bez sensu, no bo niby jak...
Pytanie drugie, załóżmy że chcę oznaczać wiadomości na liście pobieranej z GET /rooms/{id}/messages przez jako przeczytane/nieprzeczyte przez danego usera.
W db istnieje tabela, która przechowuje id użytkowników, którzy przeczytali wiadomości (relacja 1 do N)
Jak brać id usera?
- Korzystam ze sprign security i tokenów JWT, które wysyłam z każdym żądaniem - mam context usera i mogę z niego jakoś pobrać id
- Czy dorobić dla żądania request param userId i na podstawie tego sprawdzać w bazie czy user już przeczytał, dodatkowo walidować czy wysłane id usera to id właściciela tokenu
Chyba opcja druga?