2012-04-11 13 views
5

Jest to teoria/najlepszych praktyk pytanie dotyczące relaksującego i hateoas projektowania ...skutki uboczne na innych zasobów

Biorąc pod uwagę zasoby:

/myresources/(zbiorem naszych obiektach zasobów)

i

/transakcji/(zbiorem transakcji historycznych zaszły w systemie)

jest to ważny praktyką:

POST/myresources/

nie tylko stworzyć nowy zasób w/myresources/ale również nowy resource at/transactions /?

Innymi słowy, czy POST (lub jakikolwiek czasownik) do jednego efektu URL może mieć zarówno adres URL, jak i inne? Czy istnieje inne podejście? Oczywiście możemy użyć dwóch testów POST, ale to wymaga od nas zaufania do użytkownika, aby zachować prawidłowy stan w wielu modyfikacjach zasobów.

Odpowiedz

4

Tak, jest w porządku. Wyobraźmy sobie inny przypadek, w którym system ujawnia URI /myresources/latest. Gdy nie ma zasobów, które mogą zwrócić 404, ale po uruchomieniu zasobów POSTing, zarówno kanoniczny identyfikator URI, jak i identyfikator URI latest zwrócą 200 OK. Jest wiele, wiele pożytecznych korzyści dla tego podejścia.

Należy jednak pamiętać o pamięci podręcznej podczas projektowania takich zasobów. Jeśli na przykład POST do kolekcji /myresources/ unieważnisz tę kolekcję w pamięciach podręcznych po drodze. Nie spowoduje to jednak unieważnienia kolekcji /transactions/, a oba indeksy mogą zostać zsynchronizowane. Mogą one nie być zsynchronizowane w całym systemie, w zależności od wykresu pamięci podręcznych między wieloma klientami i serwerami (serwerami) pochodzenia, ale często klienci są zaprojektowani tak, aby oczekiwać, że to działanie na odległość będzie synchroniczne, a buforowanie może udaremnić to w takich przypadkach.

+0

Przydatne myśli, dzięki! Czy problem z pamięcią podręczną nie byłby obecny w prawie każdym dostępnym do aktualizacji API REST? I czy ten problem nie zostałby złagodzony za pomocą ostatnich nagłówków modów? – James

+0

Tak; i tak, może. – fumanchu

1

Wydaje mi się to całkowicie uzasadnione. Nie ma możliwości, aby osoba tworząca nowy zasób mogła stwierdzić, czy na przykład została ona zaimplementowana poprzez przeprowadzenie ankiety dla nowych zasobów dla klientów, a następnie wstrzyknąć zasób transakcji, prawda?

Na tym poziomie nie ma problemu koncepcyjnego, nie mówiąc już o "rozsądnym poziomie dla serwera do tworzenia nowych zasobów".

Powiązane problemy