Jaka jest różnica między zasobem a punktem końcowym?

139

Słyszałem, że „zasób” i „punkt końcowy” odnoszą się do tej samej rzeczy. Wydaje się, że zasób to nowszy termin.

Jaka jest różnica między nimi? Czy „zasób” oznacza projekt zgodny z REST?

B Seven
źródło

Odpowiedzi:

107

ODPOCZYNEK

Zasób to podzbiór Endpoint zgodny ze specyfikacją REST .

Punkt końcowy sam w sobie jest lokalizacją, w której można uzyskać dostęp do usługi:

https://www.google.com    # Serves HTML
8.8.8.8                   # Serves DNS
/services/service.asmx    # Serves an ASP.NET Web Service

Zasób dotyczy serwowane jeden lub więcej rzeczowników, reprezentowane w przestrzeni nazw mody, ponieważ jest łatwy do zrozumienia dla ludzi:

/api/users/johnny         # Look up johnny from a users collection.
/v2/books/1234            # Get book with ID 1234 in API v2 schema.

Wszystkie powyższe można uznać za punkty końcowe usługi, ale tylko dolna grupa byłaby uważana za zasoby, mówiąc REST. Najwyższa grupa nie jest wyrazista w zakresie treści, które dostarcza.

Żądanie REST jest jak zdanie złożone z rzeczowników (zasobów) i czasowników (metody HTTP):

  • GET(metoda) użytkownik o nazwie johnny(zasób).
  • DELETE(metoda) książka o id 1234(zasób).

Non-REST

Punkt końcowy zwykle odnosi się do usługi, ale zasób może oznaczać wiele rzeczy. Oto kilka przykładów zasobów zależnych od kontekstu, w którym są używane.

URL: jednolity lokalizator „zasobów”

  • Może być RESTful, ale często nie jest. W tym przypadku punkt końcowy jest prawie synonimem.

Zarządzanie zasobami

Słownik

  • Te definicje zapewniają wiele więcej zastosowań tego słowa.

Coś, co może Ci pomóc:

Biblioteka była cennym zasobem i często z niej korzystał.

Zasoby to naturalne substancje, takie jak woda i drewno, które są cenne dla życia:

[pl] Ziemia ma ograniczone zasoby i jeśli ich nie poddajemy recyklingowi, zużywamy je.

Zasoby to również wartościowe rzeczy, takie jak pieniądze lub dobytek, których możesz użyć, gdy ich potrzebujesz:

[pl] Rząd nie ma środków na zatrudnienie odpowiedniej liczby nauczycieli.


Morał

Termin zasób z definicji ma wiele niuansów. Wszystko zależy od kontekstu, w którym jest używany.

cchamberlain
źródło
1
Podejrzewałem to samo. Czy widziałeś jakieś odniesienia, które to wyjaśniają lub dokumentują?
B Seven
Dodano kilka linków, które dają opis każdego z warunków.
cchamberlain
84

Terminy zasób i punkt końcowy są często używane jako synonimy. Ale w rzeczywistości nie mają na myśli tego samego.

Termin punkt końcowy koncentruje się na adresie URL, który jest używany do wysyłania żądania.
Termin zasób koncentruje się na zestawie danych zwracanym przez żądanie.

Teraz ten sam zasób może być często dostępny przez wiele różnych punktów końcowych .
Również ten sam punkt końcowy może zwracać różne zasoby , w zależności od ciągu zapytania.

Zobaczmy kilka przykładów:

Różne punkty końcowe uzyskujące dostęp do tego samego zasobu

Spójrz na następujące przykłady różnych punktów końcowych :

/api/companies/5/employees/3
/api/v2/companies/5/employees/3
/api/employees/3

Oczywiście wszyscy mogliby uzyskać dostęp do tego samego zasobu w danym API.

Również istniejący interfejs API można całkowicie zmienić. Może to prowadzić do nowych punktów końcowych, które będą miały dostęp do tych samych starych zasobów przy użyciu zupełnie nowych i różnych adresów URL:

/api/employees/3
/new_api/staff/3

Jeden punkt końcowy uzyskujący dostęp do różnych zasobów

Jeśli punkt końcowy zwraca kolekcję, możesz zaimplementować wyszukiwanie / filtrowanie / sortowanie za pomocą ciągów zapytań. W rezultacie wszystkie poniższe adresy URL używają tego samego punktu końcowego ( /api/companies), ale mogą zwracać różne zasoby (lub kolekcje zasobów , które z definicji są zasobami same w sobie):

/api/companies
/api/companies?sort=name_asc
/api/companies?location=germany
/api/companies?search=siemens
Jpsy
źródło
4
ładnie wyjaśnione 👍🏻
mangonights
1
„W rezultacie wszystkie poniższe adresy URL używają tego samego punktu końcowego (/ api / firm), ale mogą zwracać różne zasoby”. Nie mam na myśli urazy, ale tak naprawdę wymyślasz tutaj swoją interpretację. Pod względem REST są to tylko lokalizacje różnych zasobów. Część punktu końcowego, którą próbujesz uwzględnić jako inną część adresu URL. To dlatego, że jesteś programistą i myślisz o tym, jak jest zaimplementowany, jako fragment kodu w jednej metodzie akcji. Wyobraź sobie, że wszystkie te różne adresy URL były kierowane i obsługiwane z 4 serwerów, czy wszystkie są tym samym punktem końcowym? Teraz to nie ma sensu.
Luke Puplett
1
Powodem, dla którego ciągi zapytań nie są częścią punktów końcowych, jest to, że punkt końcowy nie jest częścią języka REST ani adresu URL. Po prostu nie jest. Myślisz w kategoriach kodowania obsługi aplikacji internetowej. REST nie wspomina nic o parametrach zapytań, sortowaniu ani o czymkolwiek. Po prostu nie. Jeśli używasz / orders, aby zwrócić kolekcję i / orders? Top = 10, to po prostu ładne adresy URL, jest to nie mniej lub bardziej RESTful niż użycie linków do / 32knre32nj dla kolekcji i linku do / abcd dla dziesięciu najlepszych zamówień. To tylko identyfikatory zasobów. Adresy URL nie mogą być bardziej lub mniej RESTful, a punkt końcowy nie jest rzeczą.
Luke Puplett
Wystarczy dodać, że krytyczną częścią REST jest linkowanie, tak że konsument nie musi przejmować się identyfikatorami zasobów, bardzo nie obchodzi mnie, jaki adres URL znajduje się tutaj za przyciskiem Dodaj komentarz. Kiedy przestajemy myśleć o punktach końcowych i ładnych adresach URL, a zamiast o hiperłączach, w których adres URL jest przypadkowy, znacznie łatwiej jest zaprojektować ładne interfejsy API oparte na przepływie pracy w celu interakcji - chcę poszukać firmy, aby x - twoje API powinno być podróżą do x, gdzie wyszukiwanie jest w środku przepływu do ostatecznego stanu aplikacji.
Luke Puplett
Nie ma wysoce kanonicznej definicji ani specyfikacji „punktu końcowego”. Wszystko sprowadza się do zastosowanej technologii. Przykładem jest Google „Co to jest punkt końcowy?” a jednym z najważniejszych artykułów w tej sprawie jest ta strona. Definiujemy to tutaj na podstawie kontekstu, w jakim go widzieliśmy. Wszystkie przykłady w tej odpowiedzi są RESTful, chociaż sam punkt końcowy niekoniecznie jest RESTful. Zobacz SOAP.
cchamberlain
7

Prawdopodobnie moja nie jest świetną odpowiedzią, ale proszę bardzo.

Odkąd pracowałem bardziej z prawdziwie RESTful usługami sieciowymi przez HTTP, próbowałem odciągnąć ludzi od używania terminu punkt końcowy, ponieważ nie ma on jasnej definicji, i zamiast tego używam języka REST, który jest zasobami i lokalizacjami zasobów.

Moim zdaniem punkt końcowy to termin TCP. Jest powiązany z protokołem HTTP, ponieważ część adresu URL identyfikuje serwer nasłuchujący.

Więc zasób nie jest nowszym terminem, nie sądzę, myślę, że punkt końcowy był zawsze przywłaszczony i zdajemy sobie z tego sprawę, gdy zaczynamy myśleć o REST jako stylu API.

Edytować

Pisałem o tym na blogu.

https://medium.com/@lukepuplett/stop-saying-endpoints-92c19e33e819

Luke Puplett
źródło
1

Według https://apiblueprint.org/documentation/examples/13-named-endpoints.html to zasób to „ogólne” miejsce przechowywania danego podmiotu - np. / Customers / 30654 / orders, natomiast punktem końcowym jest konkretne działanie (Metoda HTTP) nad danym zasobem. Zatem jeden zasób może mieć wiele punktów końcowych.

Dafka
źródło
1
Przepraszam @Dafka, ale się mylisz. Punkt końcowy nie ma nic wspólnego z czasownikiem (metoda HTTP, taka jak GET, POST, PUT, DELETE, PATCH), który jest na nim używany.
Jpsy
0

Rozważ serwer, na którym znajdują się informacje o użytkownikach, misjach i ich punktach nagród.

  1. Użytkownicy i punkty nagród to zasoby
  2. Punkt końcowy może odnosić się do więcej niż jednego zasobu
  3. Punkty końcowe można opisać za pomocą opisu albo pełnego lub częściowego adresu URL

wprowadź opis obrazu tutaj

Źródło: punkty końcowe interfejsu API a zasoby

srinivas chaitanya
źródło
-1

1. Opis zasobu „Zasoby” odnoszą się do informacji zwracanych przez API.

2. Punkty końcowe i metody Punkty końcowe wskazują sposób uzyskiwania dostępu do zasobu, podczas gdy metoda wskazuje dozwolone interakcje (takie jak GET, POST lub DELETE) z zasobem.

Informacje dodatkowe: 3. Parametry Parametry to opcje, które można przekazać z punktem końcowym (takie jak określenie formatu odpowiedzi lub zwracanej kwoty), aby wpłynąć na odpowiedź.

4. Przykład żądania Przykład żądania zawiera przykładowe żądanie korzystające z punktu końcowego, przedstawiające skonfigurowane parametry.

5. Przykład i schemat odpowiedzi Przykład odpowiedzi przedstawia przykładową odpowiedź z przykładu żądania; schemat odpowiedzi definiuje wszystkie możliwe elementy odpowiedzi.

Źródło- odnośnik

Manthan_Admane
źródło