Як викликати HTTP API, який не є RESTful? [зачинено]


24

Як би ви назвали API, заснований на HTTP, використовує URI для іменування ресурсів та HTTP-дієслів (PUT, POST, DELETE, GET ...) для маніпулювання цими ресурсами?

За скаргами Роя Філдінга, це не REST, оскільки немає гіпермедіа.

Всередині моєї команди всі називають це "REST API". Я називаю це "REST-like", але він не є описовим і його значення нечітке. Я дуже збентежений з цього приводу, оскільки існує велика незгода щодо REST. Я не хочу брати участь у вогняних полум'ях, а просто використовую правильні умови.


6
Скільки часу на роботі ви витрачаєте насправді на програмування, і скільки часу ви витрачаєте, вирішуючи, яку термінологію використовувати? Припустимо, ви випускаєте чудовий продукт, але в деяких внутрішніх документах ви використовували трохи неправильну термінологію. Чи будуть ваші клієнти піклуватися?
Брандін

3
Як ви називаєте це і як ви називаєте це дві різні речі.
JeffO

13
Чи справді це запитання обґрунтовує хитрість та скептицизм, що виникає в коментарях? Навряд чи виглядає непосильним прагнення гідного, широко зрозумілого способу посилання на досить часто використовувану концепцію високого рівня.
Бен Аронсон

6
@Brandin, слова означають речі. Поки я не зможу підключити USB-накопичувач до вашого мозку і негайно завантажити свій код, мені доведеться використовувати мітки та термінологію для передачі свого значення. Якщо я скажу "SOAP HTTP API", це означатиме щось істотно інше, ніж "REST HTTP API". Називання речей - важка проблема, і важлива.
Пол Дрейпер

6
Будьте готові відмовитись від цієї теми разом зі своєю командою наступного разу, коли ви піднімете цю тему та отримаєте опір їй. Я є типом людини, яка вважає важливим, щоб ми використовували правильну термінологію, щоб було менше можливостей для неправильного спілкування; багато людей не думають таким чином і навіть сприймуть це як напад на їх інтелект, якщо ви спробуєте оцінити їхні слова / технічний вибір, і в цьому випадку аргументувати це просто не варто. Якщо у вас є невротична (або більше) у вашій команді, і вони чинять опір думці, що вони насправді не роблять REST, найкраще просто відмовитися від цього.
Ravenstine

Відповіді:


43

Назвіть це HTTP API .

Він відповідає стандартам HTTP і не має нічого іншого шару зверху (наприклад, SOAP).

Стандарти HTTP визначають ресурси, дієслова, заголовки, узгодження контенту тощо.

REST (Representational State Transfer) - це архітектура з вимогами, які, можливо, підлягають існуючим стандартам HTTP, але HTTP працює все самостійно.


На мій досвід, 90% "REST HTTP API" повинні називати себе "просто" HTTP API.

Не соромтеся залишати етикетку REST. Як і для мікросервісів та нереляційних баз даних, вам не потрібно мати API RESTful, щоб бути здоровим. Рой вирішив створити найбільш довготривалу, найбільш сумісну назад сумісну архітектуру мережевих додатків, яку він міг. Він добре зробив свою роботу. Але не все потребує сумісності 40+ років.


6
"На мій досвід, 90%" REST HTTP API "повинні називати себе" просто "API HTTP". +1
Артур Гаспар

Я не міг більше погодитися. Там, де я зараз працюю, ми створюємо найсучасніший інтерфейс клієнт-сервер, використовуючи передові програми для швидкого циклу розвитку. У цьому немає нічого РЕСТАВНОГО; ми використовуємо лише POST. Це не модно, але це робить роботу, і це дуже добре виконується. Це найчистіший код, який я коли-небудь бачив.
Роберт Харві

19

Моделі зрілості Річардсона виглядають так

  1. POST скрізь. Єдина кінцева точка. (SOAP)
  2. POST скрізь. Кілька кінцевих точок (ресурси)
  3. HTTP VERBS. Кілька кінцевих точок
  4. Як 2 і повертає посилання на ресурси. (ВІДПОВІДНО)

Отже, згідно з моделлю, я б назвав це веб- сервіс, який відповідає рівню 2 Річардсона або щось подібне.

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


8

Hypermedia ніколи не користувався популярністю у API, схожих на REST - до того, що коли API реально реалізує гіпермедіа-навігацію, терміна RESTful просто недостатньо, щоб відрізнити його від будь-яких інших веб-API "RESTful". REST став загальноприйнятим терміном або будь-якими веб-API, що базуються на ресурсах, а нові назви, такі як API Hypermedia  , були створені, щоб зосередити увагу на концепції гіпермедіа.

Я не хочу виступати за використання невірних термінів, але я думаю, що загальна сучасна інтерпретація REST просто означає використання однакової URL-адреси та HTTP-дієслів для більшості людей. Це не правильно, але кожен, хто знає визначення Філдінгса, також повинен знати, що багато інших цього не роблять. З іншого боку, той, хто знає REST лише спостерігаючи за тим, як реалізуються існуючі "RESTful" API, не дізнається про що ви говорите, коли ви згадуєте про менш відомі обмеження REST, як HATEOAS або код на вимогу. Філдінг може не сподобатися, але я думаю, що пізно повернутися до початкового визначення *. І будьмо чесними: якщо ви чуєте, як хтось вперше розмовляє про його REST API, ви моментально припускаєте, що він не включає гіпермедіа, чи не так?

Наполягаючи на правильному визначенні RESTful, як правило, лише створюється додаткова плутанина. Як і в багатьох термінах, які змінили своє значення з часом або в тому, що маси просто прийняли неправильно, я вдячний, якщо хтось знає оригінальне визначення, але я не став би виправляти тих, хто використовує більш широку сучасну інтерпретацію REST.

* а також пізно для встановлення нових термінів для REST-подібних негіпермедіа API. Як ми їх все-таки називатимемо? ... РЕСТИСТИЧНО ?


1
API Github має багато гіпермедіа. Я не знаю, наскільки це типово. Я погоджуюся з вами, що термін "RESTful" уникнув контролю Філдінга, щоб охопити більше речей.
декор

2

Це інтерфейс CRUD (Створення, читання, оновлення, видалення) через HTTP.

Я не можу придумати жодної влади, яка б підтвердила це твердження, тому сподіваюся, що ви отримаєте більше і кращих відповідей.


4
Щось RESTful також відповідатиме цьому визначенню.
Blrfl

1
@Blrfl AFAICT Деякий РЕСТОРАТИВНИЙ АПІС був би набором цього. Це не відповідало б визначенню Філдінга, якщо записи не містять гіперпосилань.
декор

2

Ви можете назвати це все, що завгодно, люди схильні (майже релігійно) застібати на будь-яку частину «спекуляції» REST, яку ви не дотримуєтесь, і використовуєте це як точку протесту, що дуже шкодить розвитку. Але сказане, простий факт полягає в тому, що існує (майже) нульовий сервіс, який реалізує справжній REST для своїх служб API.

У нашій команді ми назвали нашу, Stateless APIпоки вона була в стадії розробки, тому що у нас був спадковий Stateful та функціональний API SOAP, який ми замінювали (сам застарілий API ніколи не мав узгодженого та значущого імені, тому ми не надто захоплювались іменами ).

Тепер цей проект має лише один API, який називається просто the <project> API. Коли ми врешті-решт замінимо його, новий API буде просто відомий як the new <project> API.

Давати йому будь-які вигадливі та описові внутрішні назви майже безглуздо, якщо у вас не так багато API, що вам потрібно відрізняти цей від решти (у такому випадку ви, ймовірно, повинні також перейменувати всі інші).


Хоча початкове запитання було поганим, ця відповідь є твердою спробою відповісти на питання
Майкл Шоу

2

Ви можете назвати це веб-API . Це дуже широкий термін, але він може уникнути припущення щодо значення інших визначень типу API. Термін менш технічний і точний порівняно з такими альтернативами, як HTTP API , але це може бути перевагою при розмові з нетехнічними людьми.

Цей термін також використовується Леонардом Річардсоном (який визначив модель зрілості Річардсона, про яку вже згадується інша відповідь - добре прийняте вимірювання того, наскільки близький API до архітектури REST). Це ви отримуєте, якщо скинете "RESTful" частину " RESTful Web API ".

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.