Rest Architectural Constraints

REST oznacza Representational State Transfer, termin ukuty przez Roya Fieldinga w 2000 roku. Jest to styl architektury do projektowania luźno powiązanych aplikacji przez HTTP, który jest często używany w rozwoju usług internetowych. REST nie wymusza żadnej reguły dotyczącej tego, jak należy go wdrożyć na niższym poziomie, po prostu stawia wytyczne projektowe na wysokim poziomie i pozostawia do myślenia o własnej implementacji.

w moim ostatnim zatrudnieniu zaprojektowałem interfejsy API RESTful dla dużej firmy telekomunikacyjnej przez dwa dobre lata. W tym poście podzielę się moimi przemyśleniami poza standardowymi praktykami projektowymi. Możesz nie zgodzić się ze mną w kilku kwestiach, i to jest całkowicie OK. Będę szczęśliwy, aby omówić wszystko od Ciebie z otwartym umysłem.

zacznijmy od standardowych elementów konstrukcyjnych, aby wyjaśnić, co „Roy Fielding” chce, abyśmy zbudowali. Następnie omówimy moje przemyślenia, które będą bardziej ukierunkowane na drobniejsze punkty podczas projektowania interfejsów API RESTful.

ograniczenia architektoniczne

REST definiuje 6 ograniczeń architektonicznych, które sprawiają, że każda usługa internetowa – prawdziwy RESTful API.

  1. jednolity interfejs
  2. klient-serwer
  3. Bezstanowy
  4. buforowany
  5. System warstwowy
  6. Kod na żądanie (opcjonalnie)

Uniform interface

ponieważ obowiązuje sama nazwa ograniczenia, musisz zdecydować o interfejsie API dla zasobów wewnątrz systemu, które są narażone na użytkowników API i postępują religijnie. Zasób w systemie powinien mieć tylko jeden logiczny URI, który powinien zapewniać sposób pobierania powiązanych lub dodatkowych danych. Zawsze lepiej jest synonimizować zasób ze stroną internetową.

każdy pojedynczy zasób nie powinien być zbyt duży i zawierać każdy i wszystko w swojej reprezentacji. Gdy jest to istotne, zasób powinien zawierać linki (HATEOAS) wskazujące na względne Uri, aby pobrać powiązane informacje.

również reprezentacje zasobów w systemie powinny być zgodne z określonymi wytycznymi, takimi jak konwencje nazewnictwa, formaty łączy lub format danych (XML lub/i JSON).

wszystkie zasoby powinny być dostępne poprzez wspólne podejście, takie jak HTTP GET i podobnie zmodyfikowane przy użyciu spójnego podejścia.

gdy programista zapoznaje się z jednym z Twoich interfejsów API, powinien być w stanie zastosować podobne podejście do innych interfejsów API.

klient–serwer

to ograniczenie zasadniczo oznacza, że aplikacja kliencka i aplikacja serwerowa MUSZĄ BYĆ w stanie ewoluować oddzielnie bez żadnej zależności od siebie. Klient powinien znać tylko Uri zasobów i to wszystko. Dziś jest to standardowa praktyka w tworzeniu stron internetowych, więc nie jest wymagane nic wymyślnego z twojej strony. To proste.

Serwery i klienci mogą być również wymieniane i rozwijane niezależnie, o ile interfejs między nimi nie zostanie zmieniony.

Stateless

Roy Fielding czerpał inspirację z HTTP, więc odzwierciedla się w tym ograniczeniu. Sprawiają, że wszystkie interakcje klient-serwer są bezpaństwowe. Serwer nie przechowuje nic o najnowszym żądaniu HTTP, które klient złożył. Będzie traktował każde żądanie jako nowe. Bez sesji, bez historii.

Jeśli aplikacja kliencka musi być aplikacją stateful dla użytkownika końcowego, w której użytkownik loguje się raz i wykonuje inne autoryzowane operacje po tym, każde żądanie klienta powinno zawierać wszystkie informacje niezbędne do obsługi żądania – w tym szczegóły uwierzytelniania i autoryzacji.

na serwerze między żądaniami nie przechowuje się kontekstu klienta. Klient jest odpowiedzialny za zarządzanie stanem aplikacji.

buforowanie

w dzisiejszym świecie buforowanie danych i Odpowiedzi ma ogromne znaczenie wszędzie tam, gdzie jest to możliwe. Strona, którą tu czytasz, jest również buforowaną wersją strony HTML. Buforowanie przynosi poprawę wydajności po stronie klienta i lepsze możliwości skalowalności serwera, ponieważ obciążenie zostało zmniejszone.

w REST buforowanie stosuje się do zasobów, gdy ma to zastosowanie, a następnie zasoby te muszą zadeklarować się jako buforowane. Buforowanie może być zaimplementowane po stronie serwera lub klienta.

dobrze zarządzane buforowanie częściowo lub całkowicie eliminuje niektóre interakcje klient-serwer, dodatkowo poprawiając skalowalność i wydajność.

System warstwowy

REST umożliwia korzystanie z warstwowej architektury systemu, w której wdraża się interfejsy API na serwerze A, przechowuje dane na serwerze B i uwierzytelnia żądania na serwerze C, na przykład. Klient zwykle nie może stwierdzić, czy jest podłączony bezpośrednio do serwera końcowego, czy pośrednika po drodze.

Kod na żądanie (opcjonalnie)

cóż, to ograniczenie jest opcjonalne. Przez większość czasu będziesz wysyłać statyczne reprezentacje zasobów w postaci XML lub JSON. Ale kiedy potrzebujesz, możesz return executable code obsługiwać część aplikacji, np. klienci mogą zadzwonić do twojego API, aby uzyskać kod renderujący widżety UI. Jest to dozwolone.

wszystkie powyższe ograniczenia pomagają zbudować prawdziwie RESTful API i powinieneś je przestrzegać. Jednak czasami możesz naruszyć jedno lub dwa ograniczenia. Nie martw się; nadal tworzysz relaksujące API-ale nie ” prawdziwie relaksujące.”

zauważ, że wszystkie powyższe ograniczenia są najbardziej związane z WWW (www). Korzystając z interfejsów API RESTful, możesz zrobić to samo ze swoimi usługami sieciowymi, co ze stronami internetowymi.

czy ten artykuł był pomocny?

Tak
Nie

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.

More: