Чи є стратегії виявлення REST-послуг за допомогою HATEOAS?


10

Створюючи послугу REST із обмеженням HATEOAS , дуже просто рекламувати існування ресурсів за допомогою посилання. Ви робите GETкорінь мого сайту, і я відповідаю кореневим документом, у якому перераховані всі ресурси першого рівня:

{
    users: { href: "/users" }
    questions { href: "/questions" }
}

Клієнти, які розуміють, як читати ці hrefзначення, можуть виконувати GETзапити на них та відкривати всі поточні ресурси, наявні в програмі.

Це добре працює в базових сценаріях пошуку, але не вказує, чи ресурс підлягає запиту. Наприклад, це може бути розумно виконати:

GET /users?surname=Smith

Чи існують формати, які могли б виразити цю здатність запиту достатньою інформацією, щоб клієнт міг сформувати узгоджений запит без необхідності попереднього знання ресурсу?

Крім того, чи є можливість виразити, що клієнту дозволено виконувати POSTвказану локацію з очікуваним місцеположенням. Наприклад, можна очікувати, що клієнт виконає наступне, щоб створити новий ресурсний питання:

POST /questions

{
    title: "Are there strategies for discovering REST services using HATEOAS?",
    body: "When building a REST service with the HATEOAS constraint, it's very..."
}

Використовуючи HTML як формат для споживання людиною, ми можемо багато чого це висловити, використовуючи форми та письмові підказки, щоб дозволити людині виявити ті операції, які вони можуть виконувати на сервісі.

Чи існують формати, здатні подібні речі для клієнтів?


2
Проблема з відкриттям REST-сервісу була обговорена і відповідь тут: stackoverflow.com/questions/9101494/… Найпростішим рішенням є використання шаблону XHTML з формою, яка не тільки розповість про метод, який ви можете використовувати, але і про структуру об'єкта, що надсилається через елементи форми (введення, вибір тощо). Клієнтам потрібно лише проаналізувати XML, щоб знайти те, що їм потрібно. Інший спосіб - із шаблонами URL-адрес, але вони допомагають лише з ресурсів, які займають рядки запитів.
Спойк

Що стосується типів вмісту; що вирішується шляхом узгодження контенту, яке здійснюється в заголовках HTTP. Якщо сервер не може обслуговувати запитуваний тип вмісту, він повинен повернути помилку HTTP (наприклад, 300 або 406), вказавши, які типи вмісту він може повернути.
Спойк

Відповіді:


1

Як би ви знали, які вхідні матеріали є прийнятними? Тобто, якщо ваш клієнт не має попередніх знань, як би ви визначили семантику "прізвища"? Ви починаєте потрапляти на територію, потребуючи чогось типу OWL .

Я думаю, що практичніше сподіватися, що ваші клієнти зрозуміють семантику відомих типів mime; скажімо, наприклад, "текст / візитка" для людей.


Я думаю, що використання типу вмісту - це шлях; Я міг легко змінити свою програму на використання application/atomapp+xmlта зробити її доступною для всіх клієнтів, які вже розуміють цей формат. Ймовірно, є досить відомі типи вмісту, щоб зробити це практичним рішенням.
Пол Тернер

Я думаю, що коментар @Spoike - це вишуканий REST-ian підхід до другої половини проблеми; навіть якщо клієнт знає, що (наприклад) користувач представлений як vCard, він все одно повинен знати, який підмножина властивостей користувача доступна для пошуку.
Стівен Дж. Андерсон

4

Ви можете публікувати інформацію про свої послуги через "WADL"

http://en.wikipedia.org/wiki/Web_Application_Description_Language

Це необов’язково, і це не підтримує не кожен технічний сервіс REST. Джерсі, "офіційна" реалізація java jax-rs, підтримує це, наприклад - це може бути автоматично створено для вас.

Це досить рідко, побачити його як використане.

Я не знаю, які великі користуються ним. Загалом у вас є веб-сторінка з описом api.


1
CXF - це ще одна велика реалізація Java JAX-RS, яка підтримує WADL, і ви зараз починаєте бачити кількох цікавих сторонніх WADL-споживачів.
Стипендіати доналу

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