2011-12-03 11 views
7

Bez odejścia od paradygmatu RESTful, w jaki sposób mogłeś modelować walidację obiektów w sposób RESTOWNOWY? Najlepiej wyjaśnić teoretyczny przypadek użycia, który wymyśliłem ...Jak powinienem zaprojektować RESTful URL do sprawdzania poprawności obiektu?

Wyobraź sobie, że masz system z bardzo cienką warstwą sieciową, która wykonuje połączenia z usługami REST typu back-end. Powiedzmy, że użytkownik odwiedził formularz rejestracyjny i przesłał go, warstwa internetowa wyśle ​​niepotwierdzone dane bezpośrednio do usługi zaplecza, a jeśli usługa odpowie błędami sprawdzania poprawności w formacie JSON, mogą one zostać odesłane do użytkownika jako HTML.

Wyobraźmy sobie jednak, że chcemy zachować zachowanie AJAX w formularzu. Na przykład, użytkownik wprowadza swój adres e-mail i chcemy sprawdzić poprawność za pomocą AJAX, wysyłając błąd do użytkownika, jeśli jego adres e-mail jest już zarejestrowany.

Czy byłoby sensowne wdrożenie pojedynczego połączenia w celu potwierdzenia tylko adresu e-mail, czy też cały obiekt mógł zostać wysłany i zweryfikowany w usłudze zaplecza? Jeśli to drugie, jaki adres URL mógłbyś użyć tylko do sprawdzenia poprawności obiektu, zamiast go faktycznie utworzyć?

Odpowiedz

0

Sprawdzanie poprawności pojedynczego pola formularza może poprawić komfort użytkownika podczas wypełniania formularza przez użytkownika, ale po przesłaniu formularza sprawdziłbym cały obiekt, ponieważ jest mniej podatny na błędy. Adres URL może być po prostu https://mysite.com/users/emailvalidator do sprawdzania tylko wiadomości e-mail (jedno pole), a formularz może być POSTed do https://mysite.com/users (cały obiekt). W pierwszym przypadku adres URL wyraźnie wskazuje, że zasób, którego chcesz użyć, jest obiektem, który może potwierdzić pocztę e-mail.

+0

Myślałem bardziej o wywołaniu REST do usługi zaplecza. Wyobraź sobie, że połączenie do zarejestrowania użytkownika było POST do/użytkowników, jak mógłbym zasadniczo wykonać to samo połączenie, ale tylko po to, aby potwierdzić? – DrewEaster

+0

Czytanie tego: http://restfulobjects.files.wordpress.com/2011/11/restful-objects-spec-052.pdf. Mówi o wysłaniu parametru zapytania "x-ro-validate-only = true", aby polecić serwerowi tylko walidację i nie mutować. – DrewEaster

+0

Użyłbym powyższego hierarchicznego adresu URL, ponieważ zasób "emailvalidator" jest częścią zasobu "użytkownicy". Z logicznego punktu widzenia "użytkownicy" to kontener do przechowywania danych użytkownika, który również zatwierdza nowe dane przed ich wprowadzeniem. Również z logicznego punktu widzenia obiekt "emailvalidator" jest częścią tego procesu weryfikacji, specjalną częścią, która może być wywołana bezpośrednio, z wykorzystaniem własnego adresu URL. (Zobacz pytanie dotyczące hierarchicznego projektowania adresów URL: http://stackoverflow.com/questions/7833548/hierarchical-restful-url-design) – kol

2

W przeszłości Użyłem pojęcie piaskownicy sub-zasobu do tego, co sugeruje,

http://example.com/customer/23/sandbox 

To pozwala mi POST delty i mają zastosowane zmiany i zatwierdzone, ale w rzeczywistości nie popełnił. Działa to całkiem dobrze w tradycyjnych oknach dialogowych typu "zapisz/anuluj".

Jednak stwierdziłem, że radzenie sobie z tymi deltami jest prawdziwym problemem, więc opracowałem inny typ mediów, który zapisał sekwencję zdarzeń na kliencie, a następnie opublikował ten dokument w zasobach środowiska testowego. Odtwarzając sekwencję zdarzeń, mogłem zaktualizować i zweryfikować zasoby po stronie serwera w prostszy sposób.

Później uświadomiłem sobie, że naprawdę nie potrzebuję odrębnego zasobu "piaskownicy", a teraz po prostu publikuję dokument "sekwencji wydarzeń" bezpośrednio do zasobu, którego dotyczy. Mam dane w samym dokumencie, które określają, czy zmiany będą trwałe, czy tylko przejściowe. To zależy od tego, czy użytkownik wcisnął przycisk zapisu, czy nie.

+0

Czy masz przykład tego, jak wygląda dokument "sekwencji zdarzeń"? Czy nadal można "POST" bezpośrednio do zasobu? – mjs

+0

@mjs Tak, możesz publikować posty bezpośrednio w zasobach. Właśnie to robię teraz. Upuściłem subresource piaskownicy. Mam krótkie wideo, które mówi o koncepcji tutaj http://vimeo.com/15564107 i planuję opublikowanie specyfikacji i parsera dla typu mediów w nadchodzących miesiącach. –

Powiązane problemy