Projekt ścieżki zasobów REST

Opracowuję usługę REST i staram się przestrzegać konwencji i wytycznych doktora Roya Fieldinga.

Wyobrażam sobie moją usługę jako punkt końcowy, który udostępnia zbiór zasobów. Zasób jest identyfikowany przez identyfikator URI, a klienci api mogą manipulować zasobami przy użyciu semantyki HTTP (tj. Różne mapy czasowników HTTP do odpowiednich operacji nad identyfikatorami URI).

Wytyczne mówią, że te URI powinny być zdefiniowane w sposób hierarchiczny, odzwierciedlający hierarchię obiektów. Ułatwia to tworzenie zasobów, ponieważ na zapleczu potrzebne są dane do wykonania operacji tworzenia. Jednak przy dalszych manipulacjach wiele informacji zawartych w identyfikatorze URI nie będzie nawet wykorzystywanych przez usługę, ponieważ generalnie sam identyfikator zasobu wystarcza do jednoznacznej identyfikacji celu operacji.

Przykład: rozważmy Api, które ujawnia tworzenie i zarządzanie produktami. Weź również pod uwagę, że produkt jest powiązany z marką. Podczas tworzenia sensowne jest wykonanie następującej akcji: HTTP POST / Brand / {brand_id} / Product [Treść zawierająca dane niezbędne do utworzenia produktu]

Kreacja zwraca HTTP 201 utworzony z nagłówkiem lokalizacji, który ujawnia lokalizację nowo utworzonego produktu.

W przypadku dalszych manipulacji klienci mogli uzyskać dostęp do produktu, wykonując: HTTP PUT / Brand / {brand_id} / Product / {product_id} HTTP DELETE / Brand / {brand_id} / Product / {product_id} itp.

Ponieważ jednak identyfikator produktu jest uniwersalny w zakresie produktu, można wykonać następujące manipulacje w następujący sposób: / Product / {product_id} Zachowuję tylko przedrostek / Brand / {brand_id} ze względów spójności. W rzeczywistości identyfikator marki jest ignorowany przez usługę. Czy uważasz, że jest to dobra praktyka i uzasadniona ze względu na utrzymanie jasnej, jednoznacznej definicji interfejsu ServiceInterface? Jakie są korzyści z takiego działania i czy w ogóle tak jest?

Docenione zostaną również wszelkie wskazówki dotyczące najlepszych praktyk definicji URI.

Z góry dziękuję

questionAnswers(2)

yourAnswerToTheQuestion