To jest pytanie koncepcyjne.
Mam aplikację kliencką (mobilną), która musi obsługiwać akcję logowania do usługi sieciowej RESTful. Ponieważ usługa sieciowa jest zgodna z REST, oznacza to, że klient akceptuje nazwę użytkownika / hasło od użytkownika, weryfikuje tę nazwę użytkownika / hasło w usłudze, a następnie po prostu pamięta o wysyłaniu tej nazwy użytkownika / hasła przy wszystkich kolejnych żądaniach.
Wszystkie inne odpowiedzi w tej usłudze internetowej są dostarczane w formacie JSON.
Pytanie brzmi, kiedy wysyłam zapytanie do usługi sieciowej, aby po prostu dowiedzieć się, czy podana nazwa użytkownika / hasło są prawidłowe, czy usługa sieciowa powinna zawsze odpowiadać danymi JSON informującymi mnie o pomyślnym lub nieudanym wyniku, czy też powinna zwrócić HTTP 200 przy dobrych poświadczeniach i HTTP 401 na złych poświadczeniach.
Powodem, dla którego pytam, jest to, że niektóre inne usługi RESTful używają 401 dla złych poświadczeń, nawet gdy pytasz tylko, czy poświadczenia są prawidłowe. Jednak rozumiem, że odpowiedzi 401 są takie, że reprezentują one zasoby, do których nie powinieneś mieć dostępu bez ważnych poświadczeń. Jednak zasób logowania POWINIEN być dostępny dla każdego, ponieważ jedynym celem zasobu logowania jest poinformowanie Cię, czy Twoje poświadczenia są ważne.
Innymi słowy, wydaje mi się, że taka prośba:
myservice.com/this/is/a/user/action
powinien zwrócić 401, jeśli podano nieprawidłowe poświadczenia. Ale prośba taka jak:
myservice.com/are/these/credentials/valid
nigdy nie powinien zwracać 401, ponieważ ten konkretny adres URL (żądanie) jest autoryzowany z ważnymi poświadczeniami lub bez nich.
Chciałbym usłyszeć kilka uzasadnionych opinii w tej czy innej sprawie. Jaki jest standardowy sposób radzenia sobie z tym i czy standardowy sposób postępowania jest logicznie odpowiedni?