Лекція 2.1. Використання RESTful
7. Передача XML, JSON або обох
Представлення ресурсу, як правило, відображає поточний стан ресурсу (і його атрибутів) на момент його запиту клієнтським додатком. Представлення ресурсів в цьому сенсі є просто знімками в конкретні моменти часу. Ці представлення повинні бути такими ж простими, як представлення запису в базі даних, що складається з відображення між іменами стовпців і XML-тегами, де значення елементів в XML містять значення рядків. Якщо система має модель даних, то згідно з цим визначенням представлення ресурсу є знімком стану атрибутів одного з об'єктів моделі даних системи. Це ті об'єкти, які буде обслуговувати Web-сервіс REST.
Останній набір обмежень, тісно пов'язаний з дизайном Web-сервісів RESTful, відноситься до формату даних, якими обмінюються додаток і сервіс при роботі в режимі запит/відповідь або в тілі HTTP-запиту. Тут особливо важливі простота, читабельність і зв'язаність.
Об'єкти моделі даних зазвичай якось пов'язані, і ці відносини між об'єктами (ресурсами) моделі даних повинні відображатися в способі їх подання для передачі клієнтського додатку. У сервісі обговорень приклад представлень пов'язаних ресурсів може включати в себе кореневу тему обговорення і її атрибути, а також вбудовані посилання на відповіді, надіслані в цю тему.
Листинг 6. XML-представлення гілки обговорення
1
2
3
4
5
6
7
8
|
<? xml version = "1.0" ?> < discussion date = "{date}" topic = "{topic}" > < comment >{comment}</ comment > < replies > < reply from = "joe@mail.com" href = "/discussion/topics/{topic}/joe" /> < reply from = "bob@mail.com" href = "/discussion/topics/{topic}/bob" /> </ replies > </ discussion > |
Нарешті, щоб надати клієнтським застосункам можливість запитувати конкретний найбільш підходящий їм тип вмісту, проектують сервіс так, щоб він використовував вбудований HTTP-заголовок Accept, значення якого є MIME-типом. Деякі загальновживані MIME-типи, які використовуються RESTful-сервісами, перераховані в таблиці 1.
Таблица 1. Загально-вживані MIME-типи, що використовують RESTful-сервіси
Це дозволить використовувати сервіс клієнтським застосунком, написаним на різних мовах і працюючим на різних платформах і пристроях. Використання MIME-типів і HTTP-заголовку Accept є механізм узгодження вмісту (content negotiation), що дозволяє клієнтським застосункам вибирати відповідний для них формат даних і мінімізувати зв'язність даних між сервісом і застосунком, що його використовує.