Rest lub RESTful API design (Representational State Transfer) jest przeznaczony do wykorzystania istniejących protokołów. Podczas gdy REST może być używany przez prawie każdy protokół, zwykle korzysta z HTTP, gdy jest używany w interfejsach API sieci Web. Oznacza to, że programiści nie muszą instalować bibliotek ani dodatkowego oprogramowania, aby móc korzystać z projektu REST API. Projekt REST API został zdefiniowany przez Dr. Roya Fieldinga w jego dysertacji doktorskiej z 2000 roku. Wyróżnia się niesamowitą warstwą elastyczności., Ponieważ dane nie są powiązane z metodami i zasobami, REST ma możliwość obsługi wielu rodzajów wywołań, zwracania różnych formatów danych, a nawet zmiany strukturalnej przy prawidłowej implementacji hypermedia.
ta swoboda i elastyczność związana z projektowaniem REST API pozwala na zbudowanie interfejsu API, który spełni Twoje potrzeby, a jednocześnie zaspokoi potrzeby bardzo różnych klientów. W przeciwieństwie do SOAP, REST nie jest ograniczony do XML, ale zamiast tego może zwracać XML, JSON, YAML lub dowolny inny format w zależności od żądań klienta., W przeciwieństwie do RPC, użytkownicy nie muszą znać nazw procedur ani określonych parametrów w określonej kolejności.
istnieją jednak wady projektowania REST API. Możesz stracić możliwość utrzymania stanu w spoczynku, na przykład w ramach sesji, i może to być trudniejsze dla nowszych programistów w użyciu. Ważne jest również, aby zrozumieć, co sprawia, że API REST jest RESTful i dlaczego te ograniczenia istnieją przed zbudowaniem interfejsu API. W końcu, jeśli nie rozumiesz, dlaczego coś jest zaprojektowane w taki sposób, możesz utrudnić swoje wysiłki, nawet nie zdając sobie z tego sprawy.,
zrozumienie projektu REST API
chociaż większość API twierdzi, że jest RESTful, nie spełniają wymagań i ograniczeń stawianych przez Dr. Fieldinga. Istnieje sześć kluczowych ograniczeń w projektowaniu REST API, o których należy pamiętać przy podejmowaniu decyzji, czy jest to odpowiedni typ API dla Twojego projektu.
klient-serwer
ograniczenie klient-serwer działa na zasadzie, że klient i serwer powinny być oddzielone od siebie i mogą ewoluować indywidualnie i niezależnie., Innymi słowy, powinienem być w stanie wprowadzać zmiany w mojej aplikacji mobilnej bez wpływu na strukturę danych lub projekt bazy danych na serwerze. Jednocześnie powinienem być w stanie modyfikować bazę danych lub wprowadzać zmiany w mojej aplikacji serwerowej bez wpływu na klienta mobilnego. Tworzy to oddzielenie obaw, pozwalając każdej aplikacji rozwijać się i skalować niezależnie od innych i umożliwiając Twojej organizacji szybki i wydajny rozwój.,
bezstanowe
REST API są bezstanowe, co oznacza, że wywołania mogą być wykonywane niezależnie od siebie, a każde wywołanie zawiera wszystkie dane niezbędne do pomyślnego zakończenia. API REST nie powinno polegać na danych przechowywanych na serwerze lub sesjach w celu określenia, co zrobić z wywołaniem, ale raczej wyłącznie na danych dostarczonych w tym wywołaniu. Informacje identyfikacyjne nie są przechowywane na serwerze podczas wykonywania połączeń. Zamiast tego każde wywołanie ma niezbędne dane, takie jak klucz API, token dostępu, identyfikator użytkownika itp., Pomaga to również zwiększyć niezawodność API poprzez posiadanie wszystkich danych niezbędnych do wykonania połączenia, zamiast polegania na serii wywołań ze stanem serwera w celu utworzenia obiektu, co może skutkować częściowymi awariami. Zamiast tego, w celu zmniejszenia zapotrzebowania na pamięć i zapewnienia skalowalności aplikacji, Interfejs API RESTful wymaga, aby każdy stan był przechowywany na kliencie, a nie na serwerze.
Pamięć podręczna
ponieważ bezstanowe API może zwiększyć obciążenie zapytań poprzez obsługę dużych obciążeń połączeń przychodzących i wychodzących, REST API powinno być zaprojektowane tak, aby zachęcać do przechowywania danych w pamięci podręcznej., Oznacza to, że gdy dane są buforowalne, odpowiedź powinna wskazywać, że dane mogą być przechowywane do określonego czasu (wygasa-at), lub w przypadkach, gdy dane muszą być w czasie rzeczywistym, że odpowiedź nie powinna być buforowana przez Klienta. Włączenie tego krytycznego ograniczenia nie tylko znacznie zmniejszy liczbę interakcji z interfejsem API, zmniejszając zużycie wewnętrznego serwera, ale także zapewni użytkownikom interfejsu API narzędzia niezbędne do zapewnienia najszybszych i najbardziej wydajnych aplikacji. Pamiętaj, że buforowanie odbywa się po stronie klienta., Chociaż możesz być w stanie buforować niektóre dane w swojej architekturze, aby wykonać ogólną wydajność, intencją jest instruowanie klienta, jak powinien postępować i czy klient może tymczasowo przechowywać dane.
jednolity interfejs
kluczem do oddzielenia klienta od serwera jest posiadanie jednolitego interfejsu, który umożliwia niezależną ewolucję aplikacji bez konieczności ścisłego powiązania usług, modeli lub działań aplikacji z samą warstwą API., Jednolity interfejs pozwala klientowi rozmawiać z serwerem w jednym języku, niezależnie od architektonicznego zaplecza każdego z nich. Interfejs ten powinien zapewniać niezmienny, ustandaryzowany sposób komunikacji między Klientem a serwerem, taki jak używanie HTTP z zasobami URI, CRUD (Create, Read, Update, Delete) i JSON.
System warstwowy
jak sama nazwa wskazuje, system warstwowy to system składający się z warstw, z których każda ma określoną funkcjonalność i odpowiedzialność., Jeśli myślimy o strukturze kontrolera widoku modelu, każda warstwa ma swoje własne obowiązki, z modelami zawierającymi sposób formowania danych, kontroler koncentruje się na nadchodzących akcjach, a Widok koncentruje się na wyjściu. Każda warstwa jest oddzielna, ale również współdziała z innymi. W projektowaniu REST API obowiązuje ta sama zasada, ponieważ różne warstwy architektury współpracują ze sobą, tworząc hierarchię, która pomaga stworzyć bardziej skalowalną i modułową aplikację.,
System warstwowy pozwala również na hermetyzację starszych systemów i przenoszenie rzadziej dostępnych funkcji do współdzielonego pośrednika, jednocześnie chroniąc przed nimi bardziej nowoczesne i powszechnie używane komponenty. Ponadto system warstwowy daje swobodę przenoszenia systemów w architekturze i poza nią w miarę rozwoju technologii i usług, zwiększając elastyczność i trwałość tak długo, jak długo poszczególne moduły są ze sobą luźno połączone., System warstwowy zapewnia znaczne korzyści w zakresie bezpieczeństwa, ponieważ pozwala zatrzymać ataki na warstwie proxy lub w innych warstwach, uniemożliwiając im dostęp do rzeczywistej architektury serwera. Korzystając z systemu warstwowego z serwerem proxy lub tworząc pojedynczy punkt dostępu, możesz utrzymać krytyczne i bardziej podatne aspekty architektury za zaporą ogniową, zapobiegając bezpośredniej interakcji z nimi przez Klienta., Należy pamiętać, że bezpieczeństwo nie opiera się na pojedynczym rozwiązaniu „stop all”, ale raczej na wielu warstwach ze zrozumieniem, że niektóre kontrole bezpieczeństwa mogą się nie powieść lub zostać pominięte. W związku z tym, im większe bezpieczeństwo jest w stanie wdrożyć do systemu, tym bardziej prawdopodobne jest, że zapobiegniesz szkodliwym atakom.
Kod na żądanie
być może najmniej znany z sześciu ograniczeń i jedynym opcjonalnym ograniczeniem, Kod na żądanie pozwala na przesyłanie kodu lub apletów za pośrednictwem API do użytku w aplikacji., W istocie tworzy inteligentną aplikację, która nie jest już zależna wyłącznie od własnej struktury kodu. Być może jednak, ponieważ program Code on Demand wyprzedził swój czas, trudno było go zaadoptować, ponieważ interfejsy API sieci Web są wykorzystywane w wielu językach, a przesyłanie kodu rodzi pytania i obawy związane z bezpieczeństwem. (Na przykład katalog musiałby być zapisywalny, a zapora musiałaby przepuścić zawartość, która normalnie może być ograniczona.)
razem te ograniczenia składają się na teorię Reprezentacyjnego transferu stanu, czyli odpoczynku., Gdy spojrzysz wstecz, zobaczysz, jak każde kolejne ograniczenie opiera się na poprzednim, ostatecznie tworząc dość złożony—ale potężny i elastyczny—interfejs programu aplikacji. Ale co najważniejsze, ograniczenia te tworzą projekt, który działa podobnie do tego, jak uzyskujemy dostęp do stron w naszych przeglądarkach w sieci World Wide Web. Tworzy API, które nie jest podyktowane przez swoją architekturę, ale przez reprezentacje, które zwraca, oraz API, które-choć architektonicznie bezstanowe-opiera się na reprezentacji, aby dyktować stan aplikacji.,
aby uzyskać więcej informacji na temat projektowania interfejsu API REST, zapoznaj się z ebookiem niezakłócony REST: Przewodnik po projektowaniu idealnego interfejsu API.
Dodaj komentarz