Дружина: Хто такий Рой Філдінг?
Райан: Якийсь хлопець. Він розумний.
Дружина: Ой? Що він зробив?
Райан: Він допоміг написати перші веб-сервери, а потім провів багато досліджень, пояснивши, чому веб працює так, як це робиться. Його ім'я вказано в специфікації протоколу, який використовується для отримання сторінок із серверів до вашого браузера.
Дружина: Як це працює?
Райан: Павутина?
Дружина: Так.
Райан: Хм. Що ж, все насправді дивовижно. І найсмішніше, що це все дуже занижено. Протокол, про який я говорив, HTTP, він здатний на всілякі акуратні речі, які люди чомусь ігнорують.
Дружина: Ви маєте на увазі http, як початок того, що я набираю у браузері?
Райан: Так. Ця перша частина повідомляє браузеру, який протокол використовувати. Цей матеріал, який ви вводите, є одним з найважливіших проривів в історії обчислень.
Дружина: Чому?
Райан: Тому що він здатний описати розташування чогось у будь-якій точці світу з будь-якої точки світу. Це основа Інтернету. Ви можете думати про це, як координати GPS для знань та інформації.
Дружина: Для веб-сторінок?
Райан: Насправді нічого. Цей хлопець, Рой Філдінг, він багато говорить про те, на що вказують ті речі в тому дослідженні, про яке я говорив. Мережа побудована в архітектурному стилі під назвою REST. REST дає визначення ресурсу, на що вказують ті речі.
Дружина: веб-сторінка - це ресурс?
Райан: Види . Веб-сторінка - це представлення ресурсу. Ресурси - це лише поняття. URL-адреси - ті речі, які ви вводите у веб-переглядачі ...
Дружина: Я знаю, що таке URL-адреса ..
Райан: О, так. Ті кажуть браузеру, що десь є концепція. Потім браузер може перейти до запиту про конкретне представлення концепції. Зокрема, браузер просить представити концепцію на веб-сторінці.
Дружина: Які ще існують представництва?
Райан: Насправді, уявлення - це одна з таких речей, яка не звикає багато. У більшості випадків ресурс має лише одне представлення. Але ми сподіваємось, що представництва в майбутньому будуть використовуватись більше, оскільки всюди з'являється купа нових форматів.
Дружина: Як що?
Райан: Хм. Ну, є ця концепція, яку люди називають Web Services. Для багатьох людей це означає багато різних речей, але основна концепція полягає в тому, що машини можуть використовувати Інтернет так, як це роблять люди.
Дружина: Це ще одна робота-робота?
Райан: Ні, не дуже. Я не маю на увазі, що машини будуть сидіти за столом і переглядати Інтернет. Але комп'ютери можуть використовувати ті самі протоколи, щоб пересилати повідомлення один одному. Ми робимо це вже давно, але жодна з методик, якими ми сьогодні користуємось, не працює добре, коли вам потрібно мати можливість спілкуватися з усіма машинами у всьому світі.
Дружина: Чому ні?
Райан: Тому що вони не були розроблені таким чином. Коли Філдінг та його приятелі почали розбудовувати Інтернет, то можливість спілкування з будь-якою машиною в будь-якій точці світу була головною проблемою. Більшість методів, які ми використовуємо на роботі, щоб змусити комп’ютери спілкуватися один з одним, не мали цих вимог. Вам просто потрібно було поговорити з невеликою групою машин.
Дружина: А тепер вам потрібно поговорити з усіма машинами?
Райан: Так - і більше. Нам потрібно вміти розмовляти з усіма машинами про всі речі, які є на всіх інших машинах. Отже, нам потрібен спосіб, щоб одна машина розповіла іншій машині про ресурс, який може бути на іншій машині.
Дружина: Що?
Райан: Скажімо, ви розмовляєте зі своєю сестрою, і вона хоче позичити підмітальну машину чи щось таке. Але у вас його немає - у вашої мами є. Тож ви скажете своїй сестрі, щоб вона отримала її від своєї мами. Це відбувається постійно в реальному житті, і це відбувається весь час, коли машини теж починають говорити.
Дружина: То як машинки кажуть один одному, де справи?
Райан: Звичайно, URL. Якщо все, про що потрібно говорити машинам, має відповідну URL-адресу, ви створили машинний еквівалент іменника. Те, що ви з рештою світу домовились про те, щоб говорити про іменники певним чином, досить важливо, так?
Дружина: Так.
Райан: Машини не мають універсального іменника - тому вони смокчуть. Кожна мова програмування, база даних чи інший тип системи мають різний спосіб говорити про іменники. Ось чому URL так важливий. Давайте всі ці системи розповімо один одному про іменники один одного.
Дружина: Але коли я переглядаю веб-сторінку, я не думаю про це так.
Райан: Ніхто не робить. За винятком Філдінга та жменьки інших людей. Ось чому машини все ще смокчуть.
Дружина: А як щодо дієслів та займенників та прикметників?
Райан: Смішно, що ви запитували, тому що це ще один великий аспект REST. Ну, дієслова все одно.
Дружина: Я просто жартував.
Райан: Це був смішний жарт, але насправді це зовсім не жарт. Дієслова важливі. Існує потужна концепція програмування та теорії CS під назвою поліморфізм. Це примхливий спосіб сказати, що різні іменники можуть мати одне і те ж дієслово.
Дружина: Я не розумію.
Райан: Ну .. Подивіться на журнальний столик. Що таке іменники? Чашка, піднос, газета, пульт. Тепер, які речі ви можете зробити для всіх цих речей?
Дружина: я не розумію ...
Райан: Ви можете їх отримати, правда? Ви можете забрати їх. Ви можете їх збити. Ви можете їх спалити. Ви можете застосувати ті самі точні дієслова до будь-якого з об'єктів, що сидять там.
Дружина: Гаразд ... так?
Райан: Ну, це важливо. Що робити, якщо замість того, щоб я міг сказати вам, "дістаньте чашку" та "дістаньте газету" та "дістаньте дистанційне"; що, якщо замість цього нам потрібно було скласти різні дієслова для кожного з іменників? Я не міг універсально використовувати слово "get", але замість цього повинен був придумати нове слово для кожної комбінації дієслова / іменника.
Дружина: Вау! Це дивно.
Райан: Так, так і є. Наш мозок якось досить розумний, щоб знати, що одні й ті ж дієслова можна застосувати до багатьох різних іменників. Деякі дієслова більш конкретні, ніж інші, і застосовуються лише до невеликого набору іменників. Наприклад, я не можу керувати чашкою і не можу пити машину. Але деякі дієслова майже універсальні, як GET, PUT та DELETE.
Дружина: не можна ВИДАЛИТИ чашку.
Райан: Ну добре, але ви можете його викинути. Це був ще один жарт, правда?
Дружина: Так.
Райан: Отже, HTTP - цей протокол Філдінг та його друзі створені - стосується застосування дієслів до іменників. Наприклад, коли ви переходите на веб-сторінку, браузер робить HTTP GET за URL-адресою, яку ви вводите, і назад з'являється веб-сторінка.
На веб-сторінках зазвичай є зображення, правда? Це окремі ресурси. Веб-сторінка просто вказує URL-адреси зображень, а веб-переглядач переходить і робить на них більше HTTP GET, поки не будуть отримані всі ресурси та не відображається веб-сторінка. Але тут важливо те, що дуже різні види іменників можна трактувати однаково. Будь іменник - це зображення, текст, відео, mp3, слайд-шоу, будь-що. Я можу отримати всі ці речі таким же чином, вказавши URL-адресу.
Дружина: Звучить як GET - досить важливе дієслово.
Райан: Це так. Особливо, коли ви використовуєте веб-браузер, тому що браузери майже просто отримують речі. Вони не здійснюють багато інших видів взаємодії з ресурсами. Це проблема, тому що змусило багатьох людей припустити, що HTTP призначений саме для GETing. Але HTTP - це фактично протокол загальної мети для застосування дієслів до іменників.
Дружина: Класна. Але я все ще не бачу, як це щось змінює. Які види іменників та дієслів ви хочете?
Райан: Ну іменники є, але не у правильному форматі.
Подумайте, коли ви переглядаєте amazon.com і шукаєте речі, які можна придбати мені на Різдво. Уявіть, що кожен із продуктів є іменниками. Тепер, якщо вони були доступні в представництві, яке машина може зрозуміти, ви могли б зробити багато акуратних речей.
Дружина: Чому машина не може зрозуміти звичайну веб-сторінку?
Райан: Тому що веб-сторінки створені так, щоб їх розуміли люди. Машина не хвилює компонування та стилізації. Машини в основному просто потребують даних. В ідеалі кожна URL-адреса мала б читати людину та читати машинне зображення. Коли машина отримає ресурс, він попросить прочитати машину. Коли браузер отримає ресурс для людини, він попросить читати людину.
Дружина: Тож людям доведеться робити машинні формати для всіх своїх сторінок?
Райан: Якби це було цінним.
Подивіться, ми говорили про це з великою кількістю абстракцій. Як щодо цього ми беремо реальний приклад. Ви вчитель - у школі, я вважаю, що у вас є велика комп'ютерна система, або три-чотири комп'ютерні системи, швидше за все, дозволяють вам керувати учнями: в яких класах вони перебувають, в яких класах вони потрапляють, в надзвичайні контакти, інформація про книги, з яких ви навчаєтесь тощо. Якщо системи базуються на веб-сторінках, то, ймовірно, є URL-адреса для кожного з іменників, що беруть участь тут: студент, викладач, клас, книга, кімната тощо. Прямо зараз отримуйте URL-адресу через браузер надає вам веб-сторінку. Якби для кожної URL-адреси було машиночитане представлення, то було б неправдиво закріпити нові інструменти на системі, оскільки вся ця інформація була б споживаною стандартним чином. Це також полегшило б спілкування між собою кожною з систем. Або ви можете створити державну або загальнодержавну систему, яка змогла б поговорити з кожною з окремих шкільних систем, щоб зібрати результати тестування. Можливості безмежні.
Кожна з систем отримувала б інформацію один від одного за допомогою простого HTTP GET. Якщо одній системі потрібно щось додати до іншої системи, вона використовуватиме HTTP POST. Якщо система хоче щось оновити в іншій системі, вона використовує HTTP PUT. Єдине, що залишається розібратися - це як мають виглядати дані.
Дружина: Отже, над цим ви та всі комп'ютерні люди працюєте зараз? Вирішити, як мають виглядати дані?
Райан: На жаль, ні. Натомість велика більшість зайнята написанням шарів складних специфікацій для того, щоб робити цей матеріал по-іншому, що не є настільки корисним чи красномовним. Іменники не є універсальними, а дієслова - не поліморфними. Ми викидаємо десятиліття реального використання польових і перевірених методів і починаємо все з того, що дуже схоже на інші системи, які провалилися в минулому. Ми використовуємо HTTP, але лише тому, що він допомагає нам менше спілкуватися з нашою мережею та безпекою. Ми торгуємо простотою для кричущих інструментів та майстрів.
Дружина: Чому?
Райан: Я поняття не маю.
Дружина: Чому ти щось не скажеш?
Райан: Можливо, я буду.