У чому причина використання WADL?


81

Для опису RESTful можна сказати, що кожен ресурс має свій власний URI. Використовуючи HTTP GET, POST, PUT та DELETE, ми можемо працювати на цих ресурсах. Усі ресурси є представницькими. Той, хто хоче використовувати наші ресурси, може зробити це через браузер або клієнт REST.

Це головна ідея архітектури RESTful. Ця архітектура дозволяє послуги в Інтернеті. То навіщо цій архітектурі потрібен WADL? Що пропонує WADL, а що не стандартний HTTP? Чому WADL повинен існувати?


З Вікіпедії : Мова опису веб-додатків (WADL) - це машиночитаний XML-опис веб-служб на основі HTTP.
Рікардо,

Відповіді:


154

Метою WADL є визначення контракту . Контракт визначає, як одна сторона може зателефонувати іншій.

Коли ви створюєте веб-додаток з нуля, вам не потрібні контракт і WADL .

Коли ви інтегруєте свою систему з іншою системою і можете чітко спілкуватися з командою розробників, вам не потрібні договір та WADL (адже ви можете зателефонувати, щоб все зрозуміти).

Однак коли ви інтегруєте складну корпоративну систему з кількома іншими складними корпоративними системами, що підтримуються декількома різними компаніями (або федеральними установами), тоді, повірте, ви хочете, щоб контракт на комунікацію був визначений якомога строгіше. Тоді вам потрібна WADL або Open Specification. Це дуже потрібно .

Люди зі слабким фоном підприємства, як правило, сприймають цілі ІТ як колекцію відокремлених веб-додатків, розроблених самостійно. Але реальність підприємств часом буває важкою. Іноді ви навіть не можете зателефонувати або написати людям, які розробляють додаток, з яким вам доводиться інтегрувати. Іноді ви спілкуєтесь із застарілою програмою, яка більше не підтримується - вона просто запускається, і вам потрібно зрозуміти, як правильно з нею спілкуватися. У таких умовах вам потрібен контракт, оскільки він рятує вашу дупу .

Насправді генерація клієнта є другорядною особливістю визначення контракту. Це просто іграшка. Контракт змушує поганих комунікаторів чітко повідомляти правила інтеграції. Це основна причина використовувати WADL або Open Specification або що завгодно.


7
"--- ЦЕ ЗБЕРІГАЄ ПОПУ" - найкраща частина. Чи існує який-небудь генератор PHP-коду з файлу WADL?
Jatin Dhoot

Якщо вам не потрібна вата в веб-програмі. Що потрібно зробити, щоб надіслати запит на отримання значень?
Джессі

Ви можете попросити іншу команду надати вам клієнтський SDK, наприклад.
Генрік Консек,

Як використовувати та інтегрувати веб- / REST API (WA) із недостатньою документацією? Ви одноразово засудили пільгу офіційного WADL (подібно до WSDL):Contract enforces bad communicators to communicate integration rules clearly.
hc_dev

37

Використання WADL означає, що ви просто можете бути досить люб’язними, щоб фактично визначити дані / документи, які ви передаєте туди-сюди. Скажімо, ви передаєте деякі XML-фрагменти, вони насправді можуть бути частиною визначеної схеми.

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

Формат даних - це така ж частина інтерфейсу, як імена дієслів.


10
Використання REST вимагає визначити дані / документи, які ви передаєте туди-сюди. Проблема WADL полягає в тому, що він також намагається визначити кінцеві точки, які не повинні бути частиною визначення API.
Даррел Міллер,

4
Деррел, я не знаю жодної веб-служби, для якої я коли-небудь писав клієнта, яка б не мала жодної кінцевої точки, з якою вона використовувалася.
Brill Pappin

30

WADL звертається до людей, які походять із світу SOAP, де зазвичай використовується генератор коду для створення коду на стороні клієнта на основі WSDL. Я не думаю, що механізм корисний у REST, оскільки він створює клієнтський код, який пов'язаний з кінцевими точками сервера.

Я вважаю, що якщо ви належним чином визначаєте свої типи носіїв та використовуєте гіпермедіа всередині цих типів медіа, то не потрібно мати WADL. Опис доступних кінцевих точок міститься в самих визначеннях типу носія. І якщо ви зараз говорите собі, але application / xml не містить жодної інформації про доступні гіперпосилання, тоді я кажу BINGO. Ось чому я не думаю, що application / xml та application / json є відповідними типами носіїв для REST. Я не кажу, що не використовуйте XML або JSON, просто не використовуйте загальне ім'я типу носія.

Інше звернення WADL стосується документування послуг REST. На жаль, це веде розробників неправильним шляхом, оскільки WADL намагається задокументувати кінцеві точки на стороні сервера. Документування послуг REST має зосереджуватись переважно на типах носіїв. Розробник клієнта повинен мати можливість написати клієнта REST, не знаючи жодної URL-адреси, крім кореневої.


19
WADL також звертається до тих, хто має начальника, який каже, що ви повинні мати офіційне визначення у стандартному форматі. Я не кажу, що це найкращий спосіб зробити це, просто деколи корисно, так би мовити, "поставити галочку в організаційному полі". Той факт, що це надмірно, можна втратити на своєму начальнику. Однак наявність офіційного файлу def може позбавити вас від повернення до труби SOAP crack, яку смокчуть усі інші круті корпоративні діти.
Roboprog

2
@Roboprog Документуйте ваші типи носіїв замість кінцевих точок. У реєстрі IANA є безліч хороших прикладів. Також хорошим прикладом є API Sun Cloud. Ви повинні переконати свого начальника, що документування кінцевих точок - погана ідея для майбутнього.
Даррел Міллер,

1
Це також зручно для розробників, яким насправді потрібно більше писати код клієнта протягом усього дня.
Brill Pappin

1
@cboettig Schema - це лише набір правил синтаксису, вони не додають ніякої семантики. Вам потрібен якийсь інший механізм, такий як тип носія або профіль, щоб додати семантику.
Даррел Міллер

1
@cboettig Люди справді пов’язують семантику з елементами та атрибутами з простором імен, але стандартизованого процесу для цього немає. Типи носіїв мають офіційний реєстр, який вказує на специфікації, що визначають семантику. iana.org/assignments/media-types/application
Даррел Міллер

16

WADL дозволяє генерувати код, тести та документацію. Насправді є дуже корисні інструменти, що використовують WADL, деякі приклади ви можете побачити тут . Проблема "чистого" REST, як описано в дисертації Філдінга, полягає у написанні клієнтів, що підтримують Hypermedia (уявіть, наприклад, написання клієнтської програми на основі Java Swing). З WADL це завдання повністю автоматизовано, і це, на мій погляд, є величезною перевагою. Тестування стає набагато простішим.


16

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

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

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


3
Звичайно, це хороша відповідь. Опір, здається, з боку твердих SOAP-людей, які взагалі не хочуть REST, та деяких хардкорних REST-ковбоїв, які не хочуть зайвої роботи. Наявність офіційного документа - це хороший фіговий лист на "підприємстві", навіть якщо це марна трата часу на малесенький API для запуску.
Roboprog,

1
З мого досвіду, є три основні причини чогось на зразок WADL: - багато хороших розробників не знають REST. - Коли ви працюєте цілодобово, наявність документа чи API надзвичайно пришвидшує роботу. - Ви ніколи не можете припустити, що хтось інший реалізував виклик REST так само, як і ви. Навіть євангелісти REST не можуть погодитися :) Я навіть стикався з випадками, коли середовище не дозволяє виконувати виклик DELETE або PUT, тож ви отримуєте інтерфейс, схожий на REST, який використовує лише виклики GET і PUT ... і тоді документація стане вирішальною.
Брилл Паппін,

Я впевнений, що ви мали на увазі GET і POST , як підроблення PUT і DELETE з прикольними опціями POST. На жаль ...
Roboprog

7

Я думаю, що так, але Wadl може використовувати всередині решти, наприклад youtube.com/watch?v=cDdfVMro99s . Здається, що wadl підтримує клієнтів у використанні функції сервера. А клієнтам може просто знадобитися наявність параметрів та назви функції.
Ігураму

7
Те, що ви щойно описали мені, звучить як RPC, а не REST.
aehlke

3

Коли ви бажаєте виставити послуги REST, найкращим способом є створення WADL та обмін із споживачем (подібно до WSDL у веб-сервісах, що базуються на SOAP). WADL використовується для опису послуги, що працює на місці.


0

WADL використовувати не потрібно. Але, якщо ви працюєте зі складною існуючою програмою і хочете реалізувати виклик служби REST, замінивши виклик служби EJB / SOAP, тоді ви дуже безпечно та корисно практикуєте використання WADL. Використовуючи WADL, генерує клієнтські заглушки Java, ви будете синхронізовані зі службою.

Ви можете генерувати заглушку Java на стороні клієнта, використовуючи файл WADL, за допомогою плагіна wadl2java maven.

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