Jak nazwać interfejs API HTTP, który nie jest RESTful? [Zamknięte]

24

Jak nazwałbyś API oparte na HTTP, które używa URI do nazywania zasobów i czasowników HTTP (PUT, POST, DELETE, GET ...) do manipulowania tymi zasobami?

Według skarg Roya Fieldinga nie jest to REST, ponieważ nie ma hipermediów.

Wewnętrznie w moim zespole wszyscy nazywają to „REST API”. Nazywam to „REST-like”, ale nie jest opisowe, a jego znaczenie jest rozmyte. Jestem dość zdezorientowany, ponieważ istnieje ogromna różnica zdań na temat REST. Nie chcę brać udziału w wojnach z ogniem, ale używaj tylko poprawnych terminów.

pkalinow
źródło
6
Ile czasu spędzasz w pracy na programowaniu, a ile czasu decydujesz, jakiej terminologii użyć? Załóżmy, że wypuszczasz świetny produkt, ale użyłeś nieco złej terminologii w niektórych dokumentach wewnętrznych. Czy Twoi klienci by się przejmowali?
Brandin
3
Jak to nazywasz i jak to nazywasz, to dwie różne rzeczy.
JeffO
13
Czy to pytanie naprawdę uzasadnia warczenie i sceptycyzm, które pojawiają się w komentarzach? Nie wydaje się oburzające chcieć przyzwoitego, szeroko rozumianego sposobu odwoływania się do dość często używanej koncepcji na wysokim poziomie.
Ben Aaronson
6
@Brandin, słowa mają znaczenie. Dopóki nie będę mógł podłączyć pamięci USB do twojego mózgu i pobrać mojego kodu natychmiast, będę musiał użyć etykiet i terminologii, aby przekazać moje znaczenie. Jeśli powiem „SOAP HTTP API”, będzie to oznaczać coś znacznie innego niż „REST HTTP API”. Nazywanie rzeczy to trudny problem, a także ważny.
Paul Draper,
6
Przygotuj się na rezygnację z tego tematu ze swoim zespołem, gdy następnym razem poruszysz ten temat i uzyskasz opór. Jestem typem osoby, dla której ważne jest, abyśmy stosowali prawidłową terminologię, aby ograniczyć możliwość nieporozumień; wiele osób nie myśli w ten sposób, a nawet podejmie to jako atak na ich inteligencję, jeśli spróbujesz ocenić ich słowa / techniczne wybory, w którym to przypadku po prostu nie warto argumentować. Jeśli masz neurotyczny (lub więcej) w swoim zespole, a oni opierają się poglądowi, że tak naprawdę nie robią ODPOCZYNKU, najlepiej po prostu się poddać.
Ravenstine

Odpowiedzi:

43

Nazwij to HTTP API .

Jest zgodny ze standardami HTTP i nie ma na sobie żadnych innych warstw (np. SOAP).

Standardy HTTP definiują zasoby, czasowniki, nagłówki, negocjacje treści itp.

REST (REpresentational State Transfer) to architektura z wymaganiami, które mogą być dostosowane do istniejących standardów HTTP, ale HTTP działa samodzielnie.


Z mojego doświadczenia wynika, że ​​90% „interfejsów API REST HTTP” powinno nazywać się „tylko” interfejsem API HTTP.

Nie wstydź się zrezygnować z etykiety REST. Podobnie jak w przypadku mikrousług i nierelacyjnych baz danych, nie musisz mieć interfejsu API RESTful, aby być cool. Roy postanowił stworzyć najdłużej działającą, najbardziej kompatybilną wstecz, architekturę aplikacji sieciowych, jaką mógł. Wykonał dobrą robotę. Ale nie wszystko wymaga ponad 40 lat kompatybilności.

Paul Draper
źródło
6
„Z mojego doświadczenia wynika, że ​​90%„ interfejsów API REST HTTP ”powinno nazywać się„ tylko ”interfejsem API HTTP”. +1
Artur Gaspar
Nie mogłem się więcej zgodzić. Tam, gdzie obecnie pracuję, budujemy najnowocześniejszy interfejs użytkownika klient-serwer przy użyciu najnowocześniejszych ram aplikacji w szybkim cyklu rozwojowym. Nie ma w tym nic RESTful; używamy tylko POST. To nie jest modne, ale wykonuje pracę i wykonuje ją bardzo dobrze. To jeden z najczystszych kodów, jakie kiedykolwiek widziałem.
Robert Harvey
19

Modele dojrzałości Richardsona wyglądają następująco

  1. POST wszędzie. Pojedynczy punkt końcowy. (MYDŁO)
  2. POST wszędzie. Wiele punktów końcowych. (zasoby)
  3. CZASOWNIKI HTTP. Wiele punktów końcowych.
  4. Jak 2 i zwraca linki do zasobów. (Spokojny)

Więc zgodnie z modelem nazwałbym to usługą internetową zgodną z poziomem 2 Richardsona lub coś w tym stylu.

http://martinfowler.com/articles/richardsonMaturityModel.html

Esben Skov Pedersen
źródło
8

Hipermedia nigdy tak naprawdę nie stała się popularna wśród interfejsów API podobnych do REST - do tego stopnia, że ​​kiedy interfejs API faktycznie implementuje nawigację hipermedialną, termin RESTful po prostu nie wystarcza, aby odróżnić go od innych interfejsów API „RESTful”. REST stał się terminem uniwersalnym lub dowolnymi opartymi na zasobach interfejsami API sieci Web, a nowe nazwy, takie jak Hypermedia API  , zostały wymyślone, aby skupić się na koncepcji hipermedia.

Naprawdę nie chcę zalecać stosowania niepoprawnych terminów, ale myślę, że ogólna nowoczesna interpretacja REST oznacza po prostu używanie jednolitych adresów URL i czasowników HTTP dla większości ludzi. To nieprawda, ale każdy, kto zna definicję Fieldingsa, powinien również wiedzieć, że wielu innych nie. Z drugiej strony, każdy, kto zna REST tylko obserwując, w jaki sposób zaimplementowane są istniejące interfejsy API „RESTful”, nie będzie wiedział, o czym mówisz, gdy wspomnisz o mniej znanych ograniczeniach REST, takich jak HATEOAS lub kod na żądanie. Fieldingowi może się to nie podobać, ale myślę, że jest za późno, aby wrócić do pierwotnej definicji *. I bądźmy szczerzy: jeśli po raz pierwszy usłyszysz, jak ktoś mówi o jego interfejsie API REST, natychmiast zakładasz, że nie zawiera on hipermediów, prawda?

Naleganie na poprawną definicję RESTful zwykle powoduje dodatkowe zamieszanie. Podobnie jak w przypadku wielu terminów, które z czasem zmieniły swoje znaczenie lub które masy po prostu źle przyjęły, doceniam, jeśli ktoś zna oryginalną definicję, ale nie poprawiłbym nikogo, kto używa szerszej współczesnej interpretacji REST.

* a także za późno na ustanowienie nowych warunków dla interfejsów API podobnych do REST, które nie są hipermedialne. Jak powinniśmy do nich zadzwonić? ... RESTish ?

kapex
źródło
1
Interfejs API Github ma wiele hipermediów. Nie wiem jak to jest typowe. Zgadzam się z tobą, że termin „ODPOCZYNEK” wymknął się spod kontroli Fieldinga i obejmuje więcej rzeczy.
dcorking
2

Jest to interfejs CRUD (twórz, czytaj, aktualizuj, usuwaj) przez HTTP.

Nie mogę wymyślić żadnego organu, który poparłby to twierdzenie, więc mam nadzieję, że otrzymacie więcej i lepsze odpowiedzi.

dcorking
źródło
4
Coś RESTful również pasowałoby do tej definicji.
Blrfl
1
@Blrfl AFAICT Niektóre RESTful APIS byłyby nadzbiorem tego. Nie spełniałby definicji Fieldinga, jeśli rekordy nie zawierają hiperłączy.
dcorking
2

Możesz to nazwać, jak chcesz, ludzie mają tendencję (prawie religijnie) zaczepiać się o dowolną część „specyfikacji” REST, której nie przestrzegasz, i używać jej jako protestu, który jest bardzo szkodliwy dla rozwoju. Ale to powiedziawszy, prosty fakt jest taki, że istnieją (prawie) zero usług, które implementują prawdziwy REST dla swoich interfejsów API.

W naszym zespole nazwaliśmy nasz w Stateless APIczasie, gdy był w fazie rozwoju, ponieważ mieliśmy wcześniejszy stanowy i funkcjonalny interfejs API SOAP, który zastępowaliśmy (sam interfejs API nigdy nie miał uzgodnionej i znaczącej nazwy, więc nie daliśmy się wciągnąć w nazwy) ).

Teraz ten projekt ma tylko jeden interfejs API, który jest po prostu nazywany the <project> API. Kiedy w końcu go zastąpimy, nowy interfejs API będzie po prostu znany jako the new <project> API.

Nadawanie mu jakiejkolwiek wymyślnej i opisowej nazwy wewnętrznej jest prawie bez znaczenia, chyba że masz tyle interfejsów API, że musisz odróżnić ten od reszty (w takim przypadku prawdopodobnie powinieneś również zmienić nazwy wszystkich pozostałych).

Seph
źródło
Chociaż pierwotne pytanie było kiepskie, ta odpowiedź jest solidną próbą odpowiedzi na pytanie
Michael Shaw
2

Możesz to nazwać Web API . Jest to bardzo szeroki termin, ale można uniknąć nieporozumień na temat znaczenia innych definicji typów API. Termin jest mniej techniczny i precyzyjny w porównaniu do alternatyw, takich jak HTTP API , ale może to być zaletą w rozmowach z osobami nietechnicznymi.

Termin ten jest także używany przez Leonarda Richardsona (który zdefiniował Model Dojrzałości Richardsona, o którym wspomniano już inną odpowiedź - dobrze przyjęty pomiar zbliżenia interfejsu API do architektury REST). To jest to, co dostajesz, jeśli upuścisz część „RESTful” „ RESTful Web API ”.

kapex
źródło