Moje rozumienie REST, które umożliwia modelowanie operacji usługi jako reprezentacji stanu i przechodzenia z jednego stanu do drugiego z wykorzystaniem HTTP. Do niedawna zawsze rozumiałem zasoby jako reprezentacje stanu usługowego, kiedy czytałem ten artykuł Jimmy'ego Bogarda, o którym wiem, że jest inteligentnym programistą / architektem, którego społeczność bardzo szanuje. Cytując konkretne oświadczenie z tego postu
Reprezentacja jest nieco inna - opisuje aktualny stan zasobu (na żądanie).
To mnie zdezorientowało. Jaka jest ogólnie akceptowana opinia na ten temat?
rest
api
api-design
Suhas
źródło
źródło
Odpowiedzi:
Krótka odpowiedź
Już odpowiedź - jak z niczego REST, miejscem do rozpoczęcia jest z Roy Fielding tezy ; w szczególności rozdział 5 . W przypadku twojego obecnego pytania, chcesz sekcja 5.2.1.
Ratunek
Reprezentacja
Tak więc: „dzisiejsza pogoda w Los Angeles” jest zasobem. Przedstawienia kandydatów obejmowałyby: dokument tekstowy z najnowszą prognozą z krajowej służby meteorologicznej; wizualna reprezentacja radaru pogodowego i zapis audio prognozy.
źródło
Zasób to rzecz, nad którą pracujesz. Na przykład, jeśli masz interfejs API do przełączania określonej lampy, wówczas zasobem jest sama lampa. Zasób może być fizyczny (np. Lampa, osoba) lub niefizyczny (np. Artykuł, rola, wiersz w bazie danych), zasób może być pierwotny (np. Saldo) lub pochodny (np. Transakcja). Zasób może odnosić się do konkretnej jednostki (np. Piąta lampa zainstalowana w tym gnieździe lampy) lub może odnosić się do roli, która mapuje do innej jednostki w różnym czasie (np. Aktualnie zainstalowana lampa, lampa zainstalowana 5 sierpnia 2008 r.) lub może mapować do wielu podmiotów (np. wszystkich lamp w domu).
Reprezentacja zasobu to sposób, w jaki usługa komunikuje stan zasobu, np. XML, JSON, który reprezentuje stan lampy.
W interfejsie API REST zasób jest identyfikowany przez jednolity identyfikator (np. URI). Pojedynczy zasób może mieć wiele reprezentacji, w interfejsie API REST HTTP normalnie wskazujesz reprezentację, której chcesz użyć w nagłówku HTTP Content-Type i Accept.
Jedną z kluczowych realizacji w architekturze serwera klienta jest to, że nie można dostarczyć zasobu do klienta i nie powinieneś próbować tworzyć go tak, jak robisz. Zamiast tego w interfejsie API REST można zdalnie manipulować zasobem, przesyłając jego reprezentacje. Pomyśl o tym w ten sposób, że nie FedEx lampy, aby klient mógł bezpośrednio manipulować lampą, ale usługa tworzy reprezentację lampy XML / JSON / protobuf / CSV, a klient wysyła reprezentację zamierzonych manipulacji. Usługa następnie manipuluje rzeczywistym stanem lampy w imieniu klienta lub odrzuca żądanie, na przykład jeśli klient nie jest upoważniony do wykonywania operacji na lampie. Może to wydawać się oczywiste / rozdwajające włosy, ale należy zauważyć, że ponieważ reprezentacja nie jest samym zasobem,
źródło
Zasób może być fakturą.
Reprezentacja jest fakturą w określonym momencie w formacie JSON lub XML. Później możesz otrzymać tę samą fakturę, będzie to ten sam zasób, ale w potencjalnie innym stanie (anulowany, zapłacony itp.).
Bierzesz bieżący stan faktury (np .: wszystkie dane faktury w bazie danych) i nadajesz jej konkretną reprezentację (np .: html, xml, json) w określonym momencie, aby przenieść ją na inne urządzenie (np .: przeglądarka)
źródło