Tak więc usługa RESTful ma ustalony zestaw czasowników w swoim słowniku. Usługa sieci Web RESTful pobiera je z metod HTTP. Zdefiniowanie stałego słownictwa ma pewne zalety, ale tak naprawdę nie rozumiem o co chodzi. Może ktoś może to wyjaśnić.
Dlaczego ustalone słownictwo określone przez REST jest lepsze niż dynamiczne definiowanie słownictwa dla każdego stanu? Na przykład programowanie obiektowe jest popularnym paradygmatem. RPC zostało opisane w celu zdefiniowania stałych interfejsów, ale nie wiem, dlaczego ludzie zakładają, że RPC jest ograniczony przez te ograniczenia. Możemy dynamicznie określić interfejs tak, jak usługa RESTful dynamicznie opisuje jego strukturę treści.
REST ma być korzystny, ponieważ może się rozwijać bez rozszerzania słownictwa. Usługi RESTful rozwijają się dynamicznie, dodając więcej zasobów. Co jest takiego złego w rozszerzaniu usługi poprzez dynamiczne określanie słownictwa dla poszczególnych obiektów? Dlaczego po prostu nie używamy metod, które są zdefiniowane na naszych obiektach jako słownictwa, i nasze usługi opisują klientowi, czym są te metody i czy mają one skutki uboczne?
Zasadniczo mam wrażenie, że opis struktury zasobów po stronie serwera jest równoważny z definicją słownictwa, ale jesteśmy zmuszeni do używania ograniczonego słownictwa do interakcji z tymi zasobami.
Czy ustalone słownictwo naprawdę oddziela obawy klienta od obaw serwera? Z pewnością muszę się martwić pewną konfiguracją serwera, zwykle jest to lokalizacja zasobów w usługach RESTful. Narzekanie na użycie dynamicznego słownictwa wydaje się niesprawiedliwe, ponieważ i tak musimy dynamicznie zastanawiać się, jak zrozumieć tę konfigurację. Usługa RESTful opisuje przejścia, które możesz wykonać, identyfikując strukturę obiektu za pomocą hipermediów.
Po prostu nie rozumiem, co sprawia, że stałe słownictwo jest lepsze niż jakiekolwiek samoopisujące się słownictwo dynamiczne, które z łatwością mogłoby działać bardzo dobrze w serwisie podobnym do RPC. Czy to tylko słabe uzasadnienie ograniczającego słownictwa protokołu HTTP?
Odbicie
Żeby wyjaśnić moje myśli trochę lepiej niż ja. Załóżmy, że projektujesz interfejs API ogólnego przeznaczenia, a może nawet nie jest on obsługiwany przez Internet. Czy byłbyś szczęśliwy, gdyby ktoś powiedział, że możesz używać tych nazw metod tylko na swoich obiektach? REST nie jest ograniczony do HTTP, ale weź pod uwagę sytuację, w której każdy napisany interfejs API, strona internetowa lub w inny sposób po prostu składa się z obiektów zawierających metody GET POST PUT i DELETE. Tak więc metoda object.foo, którą chciałeś zdefiniować, nie jest możliwa. Musisz zdefiniować nowy obiekt o nazwie foo i wywołać jego metodę GET. Zasadniczo tak działa REST i sprawia, że myślę o tym trochę niewygodnie. Nie masz lepszego ogólnego zrozumienia tego, co robi Foo, po prostu zmuszono Cię do utworzenia nowego obiektu, który jest zasadniczo metodą na obiekcie nadrzędnym. Ponadto Twój interfejs API jest nie mniej złożony, właśnie ukryłeś złożoność interfejsu, tworząc więcej obiektów. Usługi sieci Web RESTful zmuszają nas do przyjęcia interfejsu, który może, ale nie musi być wystarczający w kontekście interfejsu API, który udostępniamy. Być może istnieje dobry powód, aby to zrobić z interfejsami API skierowanymi do Internetu, ale jest to dobry powód, aby nie przyjmować standardowych interfejsów dla każdego obiektu w każdym interfejsie API ogólnego przeznaczenia. Doceniony zostanie praktyczny przykład.