2012-05-18 13 views
6

Chciałbym, aby moje API zawierało żądanie tylko sprawdzania poprawności. Na przykład, jeśli mam URL takie jak:Interfejs API RESTful: Jakiego zestawu funkcji METODA/NAGŁÓWEK można użyć tylko do sprawdzania poprawności?

http://api.somesite.com/users/12345 

a użytkownik jest wypełnienie formularza informacji o kliencie, że w końcu patch/PUT/POST do tego zasobu. Podczas wypełniania formularza przez użytkownika mogę chcieć okresowo przesyłać częściowo zaktualizowaną reprezentację do serwera, aby można było wyświetlić w czasie rzeczywistym ich dane wejściowe (np. "Ta nazwa użytkownika jest już zajęta", "To hasło jest zbyt krótki").

Nie ma standardowej metody HTTP lub HEADER, która wydaje się dopuszczać takie zachowanie dla tego samego zasobu. Wydaje się moje opcje:

  1. Utwórz nowy zasób podrzędny walidacji
  2. użyć niestandardowego nagłówka (x-jakaś_strona-walidacji-only) i PUT wskazując, że chcę, aby potwierdzić, ale nie zapisać
+0

Powiązane pytanie: http : //stackoverflow.com/questions/8368931/how-should-i-design-a-restful-url-to-validate-an-object – suing

+0

Świetne pytanie. Wpadłem też na ten problem i debatuję między dokładnie tymi samymi dwoma podejściami. Pochylając się w kierunku nagłówka osobiście. Zainspirowany parametrem '--dry-run' programu git w wielu swoich poleceniach. –

Odpowiedz

2

Niektóre opcje

1) Za pomocą niestandardowego nagłówka
2) wprowadzenie czegoś w ciągu zapytania wskazujące do sprawdzania tylko
3) Użyj URl działania np. \ IndividualClient \ 123 \ actions \ Validate \ Invoke {section 19 here http://restfulobjects.files.wordpress.com/2011/11/restful-objects-spec-052.pdf}
4) Hierarchiczny URL, np. \ IndividualClient \ 123 \ Validation

Od tego post znajdę tę radę

używaj POST, gdy trzeba zrobić coś, co czuje RPC-like Do użycie dostać za takie rzeczy jak obliczeń, chyba że wejście jest duży, w w przypadku, gdy używasz POST

W odniesieniu do konkretnego pytania, POST powinien być używany dla nr 4 i nr 5. Te operacje są> zgodne z wytycznymi "podobnymi do RPC" powyżej. Dla # 5 pamiętaj, że POST niekoniecznie musi> używać Content-Type: application/x-www-form-urlencoded. Może to równie dobrze być ładunkiem JSON lub CSV.

Oto co mam rozważa:

Jest to dodatek zasobu:
user/walidacja
POST
Zapytanie: UserResource
Odpowiedź: ValidationResult
kodami odpowiedzi 200, 400. 404.500

Jest to aktualizacja zasobu
użytkownik/204/walidacja
POST
Zapytanie: UserResource,
Response: ValidationResult kodami odpowiedzi 200, 400. 404. 500

+0

Skończyłem na implementowaniu czegoś bardzo podobnego do tego, ale w interesie nie przepisywania mojego routera oprogramowania, właśnie zrobiłem to część querystringu: POST/user/204? Validate – Fleep

0

Opcja Thrid polegałaby na implementacji funkcji sprawdzania poprawności na kliencie. Ta funkcja wysłałaby wtedy konkretne żądanie, gdy potrzebna jest konkretna informacja.

Na przykład nie trzeba wysyłać żądania, aby sprawdzić, czy hasło jest zbyt krótkie. Ale możesz wysłać pojedyncze żądanie, aby sprawdzić, czy istnieje nazwa użytkownika.

ten sposób walidacja odbywa się Ajax, który przy okazji korzysta Restful API (HTTP) :)

+1

Twierdzę, że AJAX koniecznie używa HTTP jako protokołu transferu, ale niekoniecznie musi implementować praktyki RESTful jako API * w znaczący sposób *. Powiedzenie "all HTTP is RESTful" mija się z celem. – Fleep

+0

Ponadto, i tak sprawdzę się po stronie serwera, a w interesie nie powtarzania się, zdecydowanie wolałabym zachować standaryzację mojego kodu weryfikacyjnego w jednym miejscu. Sprawdzanie w czasie rzeczywistym, które wpływa na interfejs użytkownika, takie jak sprawdzanie poprawności haseł, działałoby dobrze z cienkim, niekrytycznym sprawdzaniem poprawności po stronie klienta. Ale nie zastępuje tego, o co pytam powyżej. – Fleep

+0

To podwójna ilość pracy programistycznej (tj. Po stronie klienta i serwera). – Pierre

Powiązane problemy