Що саме таке RESTful програмування?
Що саме таке RESTful програмування?
Відповіді:
Архітектурний стиль називається REST (Representational State Transfer) виступає , що веб - додатки повинні використовувати HTTP , як це спочатку передбачалося . Шукати повинні використовувати GET
запити. PUT
, POST
і DELETE
запити повинні використовуватися для мутації, створення та видалення відповідно .
Прихильники REST, як правило, надають перевагу URL-адресам, таким як
http://myserver.com/catalog/item/1729
але архітектура REST не вимагає цих "гарних URL-адрес". GET-запит з параметром
http://myserver.com/catalog?item=1729
є кожен шматочок як РЕСТАВНИЙ.
Майте на увазі, що GET-запити ніколи не повинні використовуватися для оновлення інформації. Наприклад, GET-запит на додавання товару до кошика
http://myserver.com/addToCart?cart=314159&item=1729
не було б доречним. GET-запити мають бути ідентичними . Тобто видача запиту двічі не повинна відрізнятися від видачі його один раз. Саме це робить запити кешованими. Запит "додати в кошик" не є ідентичним - якщо два рази додати, до кошика додаються дві копії. Запит POST явно підходить у цьому контексті. Таким чином, навіть веб-додатку RESTful потрібна частка запитів POST.
Це взято з чудової книги Девід М. Гірі, що веде Core JavaServer .
REST - це основний архітектурний принцип Інтернету. Дивовижною справою в Інтернеті є той факт, що клієнти (браузери) та сервери можуть взаємодіяти складними способами, без того, щоб клієнт заздалегідь нічого не знав про сервер та ресурси, які він розміщує. Ключовим обмеженням є те, що і сервер, і клієнт повинні домовитися про використовувані медіа , що у випадку з Інтернетом - це HTML .
API, який дотримується принципів REST , не вимагає від клієнта нічого знати про структуру API. Швидше, сервер повинен надавати будь-яку інформацію, яка потрібна клієнту для взаємодії з сервісом. Приклад цього - форма HTML . Сервер визначає розташування ресурсу та необхідні поля. Браузер не знає заздалегідь, куди подати інформацію, і не знає заздалегідь, яку інформацію надсилати. Обидві форми інформації повністю постачаються сервером. (Цей принцип називається HATEOAS : Hypermedia як двигун стану застосування .)
Отже, як це стосується HTTP та як це можна реалізувати на практиці? HTTP орієнтований на дієслова та ресурси. Два дієслова в головному вживанні є, GET
і POST
, я думаю, всі визнають. Однак стандарт HTTP визначає кілька інших, таких як PUT
і DELETE
. Потім ці дієслова застосовуються до ресурсів відповідно до інструкцій, наданих сервером.
Наприклад, давайте уявимо, що у нас є база даних користувачів, якою керує веб-служба. У нашій службі використовується спеціальна гіпермедіа на базі JSON, для якої ми призначаємо міметик application/json+userdb
(Можливо, існує application/xml+userdb
і application/whatever+userdb
- може підтримуватися багато типів медіа). І клієнт, і сервер запрограмовані зрозуміти цей формат, але вони нічого не знають один про одного. Як зазначає Рой Філдінг :
API REST повинен витратити майже всі свої описові зусилля на визначення типів медіа (ів), які використовуються для представлення ресурсів і стану керування додатком, або для визначення розширених імен відносин та / або розмітки з підтримкою гіпертексту для існуючих стандартних типів медіа.
Запит на базовий ресурс /
може повернути щось подібне:
Запит
GET /
Accept: application/json+userdb
Відповідь
200 OK
Content-Type: application/json+userdb
{
"version": "1.0",
"links": [
{
"href": "/user",
"rel": "list",
"method": "GET"
},
{
"href": "/user",
"rel": "create",
"method": "POST"
}
]
}
З опису наших ЗМІ ми знаємо, що інформацію про пов'язані ресурси ми можемо знайти з розділів, що називаються «посиланнями». Це називається контролем гіпермедіа . У цьому випадку з такого розділу ми можемо сказати, що ми можемо знайти список користувачів, зробивши ще один запит на /user
:
Запит
GET /user
Accept: application/json+userdb
Відповідь
200 OK
Content-Type: application/json+userdb
{
"users": [
{
"id": 1,
"name": "Emil",
"country: "Sweden",
"links": [
{
"href": "/user/1",
"rel": "self",
"method": "GET"
},
{
"href": "/user/1",
"rel": "edit",
"method": "PUT"
},
{
"href": "/user/1",
"rel": "delete",
"method": "DELETE"
}
]
},
{
"id": 2,
"name": "Adam",
"country: "Scotland",
"links": [
{
"href": "/user/2",
"rel": "self",
"method": "GET"
},
{
"href": "/user/2",
"rel": "edit",
"method": "PUT"
},
{
"href": "/user/2",
"rel": "delete",
"method": "DELETE"
}
]
}
],
"links": [
{
"href": "/user",
"rel": "create",
"method": "POST"
}
]
}
З цієї відповіді ми можемо багато сказати. Наприклад, тепер ми знаємо , що ми можемо створити новий користувач, POST
ІНГ /user
:
Запит
POST /user
Accept: application/json+userdb
Content-Type: application/json+userdb
{
"name": "Karl",
"country": "Austria"
}
Відповідь
201 Created
Content-Type: application/json+userdb
{
"user": {
"id": 3,
"name": "Karl",
"country": "Austria",
"links": [
{
"href": "/user/3",
"rel": "self",
"method": "GET"
},
{
"href": "/user/3",
"rel": "edit",
"method": "PUT"
},
{
"href": "/user/3",
"rel": "delete",
"method": "DELETE"
}
]
},
"links": {
"href": "/user",
"rel": "list",
"method": "GET"
}
}
Ми також знаємо, що можемо змінити наявні дані:
Запит
PUT /user/1
Accept: application/json+userdb
Content-Type: application/json+userdb
{
"name": "Emil",
"country": "Bhutan"
}
Відповідь
200 OK
Content-Type: application/json+userdb
{
"user": {
"id": 1,
"name": "Emil",
"country": "Bhutan",
"links": [
{
"href": "/user/1",
"rel": "self",
"method": "GET"
},
{
"href": "/user/1",
"rel": "edit",
"method": "PUT"
},
{
"href": "/user/1",
"rel": "delete",
"method": "DELETE"
}
]
},
"links": {
"href": "/user",
"rel": "list",
"method": "GET"
}
}
Зверніть увагу , що ми використовуємо різні HTTP дієслова ( GET
, PUT
, POST
, і DELETE
т.д.) , щоб управляти цими ресурсами, і що тільки знаннями ми припускаємо , з боку клієнта є нашим визначенням ЗМІ.
Подальше читання:
(Ця відповідь була предметом великої критики за те, що я пропустив суть. Здебільшого це була справедлива критика. Те, що я спочатку описав, більше відповідало тому, як REST зазвичай впроваджувався кілька років тому, коли я Спочатку написав це, а не справжнє його значення. Я переглянув відповідь, щоб краще представити реальний сенс.)
RESTful програмування про:
Create
, Retrieve
, Update
, Delete
стає POST
, GET
, PUT
, і DELETE
. Але REST не обмежується HTTP, це просто найчастіше використовується транспорт зараз.Остання, мабуть, є найбільш важливою з точки зору наслідків та загальної ефективності REST. Загалом, більшість RESTful дискусій, схоже, зосереджена на HTTP та його використанні з браузера, а що ні. Я розумію, що Р. Філдінг придумав цей термін, коли він описав архітектуру та рішення, які призводять до HTTP. Його теза стосується більше архітектури та кеш-здатності ресурсів, ніж про HTTP.
Якщо вас справді цікавить, що таке архітектура RESTful і чому вона працює, прочитайте її дисертацію кілька разів і прочитайте всю річ не лише Главу 5! Далі розберемося, чому працює DNS . Прочитайте про ієрархічну організацію DNS та про те, як працюють реферали. Потім прочитайте та розгляньте, як працює кешування DNS. Нарешті, прочитайте специфікації HTTP (зокрема RFC2616 та RFC3040 ) та подумайте, як і чому кешування працює так, як це робиться. Зрештою, він просто натисне. Остаточне відкриття для мене було, коли я побачив схожість між DNS та HTTP. Після цього розуміння того, чому інтерфейси передачі SOA та повідомлень масштабовані, починає клацати.
Я думаю, що найважливіший трюк для розуміння архітектурної важливості та наслідків для архітектури RESTful та Shared Nothing - це уникати зависання технологій та деталей реалізації. Концентруйтеся на тому, хто володіє ресурсами, хто відповідає за їх створення / підтримку тощо. Потім подумайте про представлення, протоколи та технології.
PUT
і POST
насправді не пов'язуйте один з одним оновлення та створення. PUT
можна використовувати для створення, якщо клієнт диктує, яким буде URI. POST
створюється, якщо сервер призначає новий URI.
urn:
схему. Концептуально різниці немає; однак URN вимагає, щоб у вас був окремо визначений метод, щоб "знайти" ресурс, ідентифікований (названий) URN. Потрібно бути обережним, щоб не вводити неявну зв'язок при зв’язуванні названих ресурсів та їх розташування.
Ось як це може виглядати.
Створіть користувача з трьома властивостями:
POST /user
fname=John&lname=Doe&age=25
Сервер відповідає:
200 OK
Location: /user/123
Надалі ви зможете отримати інформацію про користувача:
GET /user/123
Сервер відповідає:
200 OK
<fname>John</fname><lname>Doe</lname><age>25</age>
Щоб змінити запис ( lname
і age
залишиться незмінним):
PATCH /user/123
fname=Johnny
Щоб оновити запис (а отже, lname
і age
буде NULL):
PUT /user/123
fname=Johnny
PUT fname=Jonny
. Це встановить lname
і age
значення за замовчуванням (можливо, NULL або порожній рядок, і ціле число 0), оскільки PUT
перезаписується весь ресурс з даними представленого представлення. Це не те, що мається на увазі під "оновленням", щоб зробити реальне оновлення, використовуйте PATCH
метод, оскільки це не змінює поля, які не вказані в представленні.
/user/1
це не має сенсу, і в ньому повинен бути список /users
. У 201 Created
такому випадку відповідь має бути не лише ОК.
Чудова книга про REST - REST in Practice .
Потрібно читати: Представницький стан передачі (REST), а API REST повинен керуватися гіпертекстом
Дивіться статтю Мартіна Фаулерса про модель зрілості Річардсона (RMM) для пояснення того, що таке послуга RESTful.
Щоб бути RESTful, Службі необхідно виконати гіпермедію як двигун стану заявки. (HATEOAS) , тобто йому потрібно досягти рівня 3 в RMM, прочитати статтю для деталей або слайдів з розмови qcon .
Обмеження HATEOAS - це абревіатура для Hypermedia як двигуна стану застосування. Цей принцип є ключовим диференціатором між REST та більшості інших форм клієнтської серверної системи.
...
Клієнт програми RESTful повинен знати лише одну фіксовану URL-адресу, щоб отримати доступ до нього. Усі майбутні дії слід динамічно виявляти з гіперпосередкових посилань, включених до представлень ресурсів, повернених з цієї URL-адреси. Також очікується, що стандартизовані типи носіїв зрозуміють будь-який клієнт, який може використовувати API RESTful. (З Вікіпедії, вільної енциклопедії)
REST Лакмусовий тест для веб-рамок - аналогічний тест зрілості для веб-фреймворків.
Підхід до чистого REST: Навчитися любити HATEOAS - це гарна колекція посилань.
REST порівняно з SOAP для громадського хмара обговорює поточний рівень використання REST.
REST та версії обговорюють розширюваність, версійність, еволюційність тощо через модифікованість
Що таке REST?
REST означає представницький державний трансфер. (Інколи написано "ReST".) Він покладається на протокол зв'язку без стану, клієнт-сервер, кешований протокол зв'язку - і практично у всіх випадках використовується протокол HTTP.
REST - це стиль архітектури для проектування мережевих додатків. Ідея полягає в тому, що замість використання складних механізмів, таких як CORBA, RPC або SOAP для з'єднання між машинами, для здійснення дзвінків між машинами використовується простий HTTP.
Багато в чому всесвітню павутину на основі HTTP можна розглядати як архітектуру на основі REST. Програми RESTful використовують запити HTTP для розміщення даних (створення та / або оновлення), зчитування даних (наприклад, здійснення запитів) та видалення даних. Таким чином, REST використовує HTTP для всіх чотирьох операцій CRUD (Create / Read / Update / Delete).
REST - це легка альтернатива таким механізмам, як RPC (віддалені виклики процедури) та веб-сервіси (SOAP, WSDL та ін.). Пізніше ми побачимо, наскільки простішим є REST.
Незважаючи на простоту, REST є повнофункціональним; у веб-службах ви нічого не можете зробити, що не можна зробити з архітектурою RESTful. REST - це не «стандарт». Наприклад, ніколи не буде рекомендації W3C для REST. І хоча існують рамки програмування REST, робота з REST настільки проста, що ви часто можете "перекласти свої" за допомогою стандартних функцій бібліотеки такими мовами, як Perl, Java або C #.
Одне з найкращих посилань, яке я знайшов, коли намагаюся знайти простий реальний сенс відпочинку.
REST використовує різні методи HTTP (в основному GET / PUT / DELETE) для маніпулювання даними.
Замість того, щоб використовувати певну URL-адресу для видалення методу (скажімо, /user/123/delete
), ви надіслали б ВИДАЛИТИ запит до /user/[id]
URL-адреси, відредагувати користувача, отримати інформацію про користувача, якому ви надсилаєте GET-запит/user/[id]
Наприклад, замість набору URL-адрес, які можуть мати вигляд деяких із наведених нижче.
GET /delete_user.x?id=123
GET /user/delete
GET /new_user.x
GET /user/new
GET /user?id=1
GET /user/id/1
Ви використовуєте HTTP "дієслова" і маєте ..
GET /user/2
DELETE /user/2
PUT /user
Це програмування, де архітектура вашої системи відповідає стилю REST, викладеному Роєм Філдінгом у своїй дипломній роботі . Оскільки це архітектурний стиль, який описує Інтернет (більш-менш), його цікавить багато людей.
Відповідь бонуса: Ні. Якщо ви не вивчаєте архітектуру програмного забезпечення як академічну чи розробляєте веб-сервіси, насправді немає причин, щоб не почули цей термін.
Я б сказав, що програмування RESTful стосується створення систем (API), які відповідають архітектурному стилю REST.
Я знайшов цей фантастичний, короткий і простий для розуміння підручник про REST доктором М. Елкштейном і цитував істотну частину, яка б відповідала на ваше питання здебільшого:
Дізнайтеся REST: Навчальний посібник
REST - це стиль архітектури для проектування мережевих додатків. Ідея полягає в тому, що замість використання складних механізмів, таких як CORBA, RPC або SOAP для з'єднання між машинами, для здійснення дзвінків між машинами використовується простий HTTP.
- Багато в чому всесвітню павутину на основі HTTP можна розглядати як архітектуру на основі REST.
Програми RESTful використовують запити HTTP для розміщення даних (створення та / або оновлення), зчитування даних (наприклад, здійснення запитів) та видалення даних. Таким чином, REST використовує HTTP для всіх чотирьох операцій CRUD (Create / Read / Update / Delete).
Я не думаю, що ти повинен почувати себе дурним, коли не чуєш про REST за межами Stack Overflow ..., я був би в тій же ситуації !; відповіді на це інше питання ТА на тему Чому зараз REST стає великим, може полегшити деякі почуття.
Прошу вибачення, якщо я не відповідаю на питання безпосередньо, але простіше зрозуміти все це на більш детальних прикладах. Філдінг непростий для розуміння через всю абстракцію та термінологію.
Тут є досить хороший приклад:
Пояснення REST та гіпертексту: Spam-E Robot Cleaning Robot
А ще краще, тут є чітке пояснення з простими прикладами (powerpoint є всеосяжнішим, але більшу частину ви можете отримати у версії html):
http://www.xfront.com/REST.ppt або http://www.xfront.com/REST.html
Прочитавши приклади, я міг зрозуміти, чому Кен говорить, що REST керується гіпертекстом. Я насправді не впевнений, що він має рацію, тому що той / user / 123 - це URI, який вказує на ресурс, і мені не ясно, що це нерестинно лише тому, що клієнт знає про це "поза межами діапазону".
Цей xfront документ пояснює різницю між REST та SOAP, і це теж дуже корисно. Коли Філдінг каже: " Це RPC. Це кричить RPC. ", Зрозуміло, що RPC не є RESTful, тому корисно побачити точні причини цього. (SOAP - це тип RPC.)
Що таке REST?
REST офіційними словами, REST - це архітектурний стиль, побудований на певних принципах, використовуючи нинішні основи “Web”. Існує 5 основних основ Інтернету, які використовуються для створення REST-послуг.
Communication is Done by Representation
означає?
Я бачу купу відповідей, які говорять про те, що розміщення всього про користувача 123 на ресурсі "/ user / 123" є RESTful.
Рой Філдінг, який придумав цей термін, каже, що API REST повинні керуватися гіпертекстом . Зокрема, "API REST не повинен визначати назви фіксованих ресурсів або ієрархії".
Отже, якщо ваш "/ user / 123" шлях жорстко кодується на клієнті, він насправді не RESTful. Гарне використання HTTP, можливо, може бути і ні. Але не ВІДПОВІДНО. Це має виходити з гіпертексту.
Відповідь дуже проста: є дисертація, написана Роєм Філдінгом.] 1 У цій дисертації він визначає принципи REST. Якщо програма відповідає всім цим принципам, то це програма REST.
Термін RESTful був створений тому, що ppl вичерпав слово REST, називаючи їх не-REST-додатком як REST. Після цього термін RESTful також був вичерпаний. Сьогодні ми говоримо про Web API та Hypermedia API , тому що більшість так званих програм REST не відповідали HATEOAS частині єдиного обмеження інтерфейсу.
Обмеження REST такі:
архітектура клієнт-сервер
Тому він не працює, наприклад, з розетками PUB / SUB, він заснований на REQ / REP.
спілкування без громадянства
Отже сервер не підтримує стани клієнтів. Це означає, що ви не можете використовувати сервер сховища бічного сеансу, і вам доведеться аутентифікувати кожен запит. Ваші клієнти, можливо, надсилають основні заголовки аутентифікації через зашифроване з'єднання. (У великих програмах важко підтримувати багато сеансів.)
використання кешу, якщо можете
Тож вам не доведеться подавати однакові запити знову і знову.
єдиний інтерфейс як загальний контракт між клієнтом і сервером
Договір між клієнтом та сервером не підтримується сервером. Іншими словами, клієнт повинен бути відірваний від реалізації послуги. Ви можете досягти цього стану, використовуючи стандартні рішення, наприклад стандарт IRI (URI) для ідентифікації ресурсів, стандарт HTTP для обміну повідомленнями, стандартний тип MIME для опису формату серіалізації тіла, метаданих (можливо, RDF vocabs, мікроформати тощо) для описати семантику різних частин тіла повідомлення. Щоб роз'єднати структуру IRI від клієнта, вам доведеться надсилати гіперпосилання клієнтам у таких форматах гіпермедіа (HTML, JSON-LD, HAL тощо). Таким чином, клієнт може використовувати метадані (можливо, зв'язки зв’язку, RDF vocabs), призначені для гіперпосилань, для навігації у стан машини програми через належні переходи стану, щоб досягти своєї поточної мети.
Наприклад, коли клієнт хоче надіслати замовлення до веб-магазину, він повинен перевірити гіперпосилання у відповідях, надісланих веб-магазином. Перевіряючи посилання, він виявляється описаним з http://schema.org/OrderAction . Клієнт знає vocab schema.org, тому він розуміє, що при активації цього гіперпосилання він надішле замовлення. Так він активує гіперпосилання та надсилає POST https://example.com/api/v1/order
повідомлення належному органу. Після цього сервіс обробляє повідомлення та відповідає з результатом, має відповідний заголовок статусу HTTP, наприклад 201 - created
, успішно. Для анотування повідомлень із детальними метаданими стандартним рішенням є використання формату RDF, наприклад JSON-LD з REST vocab, наприклад, Hydra та домен, специфічний для домену, наприкладschema.org або будь-який інший vocab для даних, а також, можливо, користувацький vocab, який використовується для додатків. Зараз це непросто, тому більшість ppl використовують HAL та інші прості формати, які зазвичай надають лише REST vocab, але не пов'язану підтримку даних.
побудувати шарувату систему для збільшення масштабованості
Система REST складається з ієрархічних шарів. Кожен шар містить компоненти, які використовують послуги компонентів, які перебувають у наступному шарі нижче. Таким чином, ви можете додавати нові шари та компоненти без особливих зусиль.
Наприклад, є рівень клієнта, який містить клієнтів, а нижче - рівень обслуговування, який містить одну службу. Тепер ви можете додати кеш-пам'ять на стороні клієнта між ними. Після цього ви можете додати інший екземпляр служби та балансир навантаження тощо. Код клієнта та код послуги не зміняться.
код на вимогу для розширення функціональності клієнта
Це обмеження необов’язкове. Наприклад, ви можете надіслати клієнтові аналізатор для певного типу носія і так далі ... Для цього вам може знадобитися стандартна система завантажувача плагінів у клієнті, або ваш клієнт буде приєднаний до рішення завантажувача плагінів .
Обмеження REST спричиняють надзвичайно масштабовану систему, в якій клієнти відключаються від впровадження послуг. Таким чином, клієнти можуть бути багаторазовими, як і браузери в Інтернеті. Клієнти та сервіси поділяють однакові стандарти та вокаби, тому вони можуть зрозуміти один одного, незважаючи на те, що клієнт не знає деталей щодо реалізації послуги. Це дає змогу створювати автоматизованих клієнтів, які можуть знайти та використовувати REST-послуги для досягнення своїх цілей. У довгостроковій перспективі ці клієнти можуть спілкуватися один з одним і довіряти один одному завдання, як і люди. Якщо ми додамо шаблони навчання для таких клієнтів, то результатом буде одне чи більше AI з використанням веб-машин замість одного серверного парку. Отже, наприкінці мрія Бернерса Лі: семантична павутина та штучний інтелект будуть реальністю. Тож у 2030 році ми закінчуємось скасованим Skynet. До того як ... ;-)
Програмування API RESTful (Представницький стан передачі) - це написання веб-додатків на будь-якій мові програмування, дотримуючись 5 основних принципів архітектурного стилю програмного забезпечення :
Іншими словами, ви пишете прості мережеві програми "точка-до-точка" через HTTP, які використовують дієслова, такі як GET, POST, PUT або DELETE, реалізуючи архітектуру RESTful, яка пропонує стандартизацію інтерфейсу, який піддається кожному "ресурсу". Це не що, використовуючи поточні функції Інтернету простим та ефективним способом (дуже успішна, перевірена та розподілена архітектура). Це альтернатива більш складним механізмам, таким як SOAP , CORBA та RPC .
Програмування RESTful відповідає дизайну веб-архітектури, і при правильному впровадженні воно дозволяє повністю скористатися масштабованою веб-інфраструктурою.
Якби мені довелося скоротити оригінальну дисертацію з REST до лише 3 коротких речень, я думаю, що наступне відображає її суть:
Після цього легко впасти в дебати про адаптації, умови кодування та найкращі практики.
Цікаво, що в дисертації не згадуються операції HTTP POST, GET, DELETE або PUT. Це повинно бути чиїсь пізнішим тлумаченням "найкращої практики" для "єдиного інтерфейсу".
Що стосується веб-сервісів, то, здається, нам потрібен певний спосіб розрізнити архітектури на базі WSDL та SOAP, які додають інтерфейсу значні накладні витрати і, можливо, набагато непотрібні. Вони також потребують додаткових фреймворків та інструментів для розробників для реалізації. Я не впевнений, чи REST - це найкращий термін для розрізнення інтерфейсів здорового глузду та надмірно розроблених інтерфейсів, таких як WSDL та SOAP. Але нам щось потрібно.
REST - це архітектурна схема та стиль написання розподілених додатків. Це не стиль програмування у вузькому розумінні.
Скажімо, що ви використовуєте стиль REST - це схоже на те, що ви побудували будинок у певному стилі: наприклад, Tudor або Victorian. Як REST як програмний стиль, так і Tudor або Victorian як домашній стиль можна визначити якостями та обмеженнями, які їх складають. Наприклад, REST повинен мати відділення сервера клієнтів, де повідомлення самоописуються. У будинках у стилі Тюдора є фронтони, що перекриваються, та дахи, які круто вивернуті фронтовими фронтонами. Ви можете прочитати дисертацію Роя, щоб дізнатися більше про обмеження та якості, які складають REST.
REST на відміну від домашніх стилів проходив важкий час послідовно і практично застосовується. Це, можливо, було навмисно. Повністю залишаючи свою реалізацію на дизайнері. Отже, ви можете робити те, що хочете, до тих пір, поки не будете дотримуватися обмежень, викладених у дисертації, яку ви створюєте REST Systems.
Бонус:
Весь веб заснований на REST (або REST базувався на Інтернеті). Тому, як веб-розробник, ви можете знати про це, хоча писати хороші веб-додатки не потрібно.
Ось моя основна схема REST. Я намагався продемонструвати мислення кожного з компонентів в архітектурі RESTful, щоб зрозуміти концепцію більш інтуїтивно. Сподіваємось, це допомагає демістифікувати REST для деяких людей!
REST (Представницька державна передача) - це архітектура дизайну, яка визначає, як мережеві ресурси (тобто вузли, що обмінюються інформацією) проектуються та вирішуються. Взагалі архітектура RESTful робить це так, що клієнт (запитуючий апарат) і сервер (автовідповідач) можуть запитувати читання, запис та оновлення даних, без того, щоб клієнт знав, як працює сервер і сервер може передавати він повертається, не вимагаючи нічого знати про клієнта. Гаразд, круто ... але як це зробити на практиці?
Найбільш очевидною вимогою є те, що повинна бути якась універсальна мова, щоб сервер міг повідомити клієнту, що він намагається зробити із запитом, і щоб сервер відповів.
Але щоб знайти будь-який даний ресурс і потім повідомити клієнтові, де цей ресурс живе, повинен бути універсальний спосіб спрямування на ресурси. Тут надходять універсальні ідентифікатори ресурсів (URI); вони в основному є унікальними адресами для пошуку ресурсів.
Але архітектура REST не закінчується! Хоча вищезазначене відповідає основним потребам того, що ми хочемо, ми також хочемо мати архітектуру, яка підтримує об'єм трафіку, оскільки будь-який даний сервер зазвичай обробляє відповіді від багатьох клієнтів. Таким чином, ми не хочемо переповнювати сервер, щоб він запам'ятав інформацію про попередні запити.
Отже, ми накладаємо обмеження, що кожна пара запит-відповідь між клієнтом і сервером є незалежною, це означає, що сервер не повинен пам'ятати нічого про попередні запити (попередні стани взаємодії клієнт-сервер), щоб відповідати на новий запит. Це означає, що ми хочемо, щоб наші взаємодії були без громадянства.
Щоб додатково полегшити напругу на нашому сервері від повторних обчислень, що вже були зроблені для даного клієнта, REST також дозволяє кешувати. В основному кешування означає зробити знімок початкової відповіді, що надається клієнтові. Якщо клієнт повторно подає той же запит, сервер може надати клієнту знімок, а не повторити всі обчислення, необхідні для створення початкової відповіді. Однак, оскільки це знімок, якщо знімок не закінчився - сервер встановлює час закінчення терміну дії - і відповідь оновлюється з початкового кешу (тобто запит дасть іншу відповідь, ніж кешована відповідь) , клієнт не побачить оновлення, поки кеш не закінчиться (або кеш не буде очищено) і відповідь не буде надано з нуля знову.
Останнє, що ви часто буваєте тут про RESTful архітектури, це те, що вони шаруються. Ми фактично вже неявно обговорювали цю вимогу під час обговорення взаємодії між клієнтом та сервером. В основному це означає, що кожен шар нашої системи взаємодіє лише з сусідніми шарами. Отже, в нашому обговоренні клієнтський рівень взаємодіє з нашим серверним рівнем (і навпаки), але можуть бути й інші серверні шари, які допомагають первинному серверу обробляти запит, з яким клієнт безпосередньо не спілкується. Швидше, сервер передає запит у міру необхідності.
Тепер, якщо все це звучить знайомо, то чудово. Протокол передачі гіпертексту (HTTP), який визначає протокол зв'язку через всесвітню мережу, є реалізацією абстрактного поняття архітектури RESTful (або екземпляра класу REST, якщо ви фанатик OOP, як я). У цій реалізації REST клієнт і сервер взаємодіють через GET, POST, PUT, DELETE тощо, які є частиною універсальної мови, і ресурси можуть бути вказані на використання URL-адрес.
Я вважаю, що сенс спокою - це поділ штату на більш високий рівень , використовуючи Інтернет (протокол) як транспортний рівень без громадянства . Більшість інших підходів змішують речі.
Це був найкращий практичний підхід для вирішення фундаментальних змін програмування в епоху Інтернету. Щодо фундаментальних змін, Ерік Мейєр продемонстрував тут дискусію: http://www.infoq.com/interviews/erik-meijer-programming-language-design-effects-purance#view_93197 . Він узагальнює це як п’ять ефектів і представляє рішення шляхом проектування рішення на мові програмування. Рішення також може бути досягнуто на платформеному або системному рівні, незалежно від мови. Відпочиваючих можна розглядати як одне з рішень, яке було успішним у сучасній практиці.
За допомогою спокійного стилю ви отримуєте та маніпулюєте станом програми через ненадійний Інтернет. Якщо не вдасться поточній операції отримати правильний і поточний стан, для продовження роботи програми потрібна головна нульова перевірка. Якщо не вдається маніпулювати станом, він зазвичай використовує кілька етапів підтвердження для того, щоб все було правильним. У цьому сенсі відпочинок сам по собі не є цілим рішенням, йому потрібні функції в іншій частині стеку веб-додатків для підтримки його роботи.
Враховуючи цю точку зору, стиль відпочинку не дуже пов'язаний з Інтернетом чи веб-додатками. Це фундаментальне рішення для багатьох ситуацій програмування. Це також не просто, він просто робить інтерфейс справді простим, і справляється з іншими технологіями напрочуд добре.
Просто мій 2с.
Редагувати: ще два важливі аспекти:
Безгромадянське введення в оману. Йдеться про спокійний API, а не про додаток чи систему. Система повинна бути державною. Спокійний дизайн - це розробка системи, що працює на основі API без стану. Деякі цитати з іншої якості :
Це дивовижно довга "дискусія", але все ж таки досить заплутано.
ІМО:
1) Не існує такого поняття, як спокійне програмування, без великого спільного і багато пива :)
2) Представницький державний трансфер (REST) - це архітектурний стиль, визначений у дисертації Роя Філдінга . Він має ряд обмежень. Якщо ваша Служба / Клієнт поважають їх, то це RESTful. Ось воно.
Ви можете узагальнити (значно) обмеження:
Є ще один дуже хороший пост, який добре пояснює речі.
Дуже багато відповідей копіюють / вставляють дійсну інформацію, змішуючи її та додаючи певну плутанину. Тут люди говорять про рівні, про URI-файли RESTFul (такого немає!), Застосовують методи HTTP GET, POST, PUT ... REST - це не про це чи не лише про це.
Наприклад, посилання - приємно мати гарний вигляд API, але врешті-решт клієнт / сервер насправді не піклується про посилання, які ви отримуєте / надсилаєте - це важливий вміст.
Зрештою, будь-який клієнт RESTful повинен мати можливість споживати будь-яку послугу RESTful до тих пір, поки не буде відомий формат вмісту.
Старе запитання, новий спосіб відповіді. Існує багато хибного уявлення про цю концепцію. Я завжди намагаюся пам'ятати:
Я визначаю спокійне програмування як
Додаток є спокійним, якщо він забезпечує ресурси (будучи комбінацією даних + управління переходами стану) у мультимедійному типі, який клієнт розуміє
Щоб бути спокійним програмістом, ви повинні намагатися створювати додатки, які дозволяють акторам робити щось. Не лише оголення бази даних.
Управління переходом стану має сенс лише тоді, коли клієнт і сервер домовляються про представлення ресурсу типу медіа Інакше немає способу дізнатися, що таке контроль, а що ні, і як виконати контроль. IE, якщо веб-переглядачі не знали <form>
тегів у html, тоді вам нічого не вдалося передати у стан переходу у вашому браузері.
Я не прагну самореклами, але я дуже широко розширюю ці ідеї в своїх розмовах http://techblog.bodybuilding.com/2016/01/video-what-is-restful-200.html .
Уривок з моєї бесіди - про часто згадувану модель зрілості Річардсона, я не вірю в рівні, ти або РЕСТАЛЬНИЙ (рівень 3), або ні, але те, що мені подобається викликати з цього приводу - це кожен рівень робить для вас на вашому шляху до RESTful
REST визначає 6 архітектурних обмежень, які роблять будь-який веб-сервіс - справжнім RESTful API .
REST === HTTP-аналогія не є правильною, поки ви не наголосите на тому, що вона "ОБОВ'ЯЗКОВО" повинна бути керована HATEOAS .
Рой сам це очистив тут .
API REST слід вводити без попередніх знань понад початковий URI (закладку) та набір стандартизованих типів носіїв, які підходять для передбачуваної аудиторії (тобто очікується, що їх зрозуміє будь-який клієнт, який може використовувати API). З цього моменту всі переходи стану додатків повинні керуватися вибором клієнта вибору наданого сервером вибору, який присутній в отриманих представленнях або мається на увазі шляхом маніпулювання користувачем цими представленнями. Переходи можуть визначатися (або обмежуватися) знаннями клієнта про типи засобів масової інформації та механізми комунікації ресурсів, обидва з яких можуть бути вдосконалені на ходу (наприклад, код за запитом).
[Невдача тут означає, що інформація про позадіапазон є рушійною взаємодією замість гіпертексту.]
REST - це архітектурний стиль, який базується на веб-стандартах та протоколі HTTP (запроваджений у 2000 році).
У архітектурі на основі REST все є ресурсом (Користувачі, Замовлення, Коментарі). Доступ до ресурсу здійснюється через загальний інтерфейс на основі стандартних методів HTTP (GET, PUT, PATCH, DELETE тощо).
У архітектурі на основі REST у вас є сервер REST, який забезпечує доступ до ресурсів. Клієнт REST може отримувати доступ та змінювати ресурси REST.
Кожен ресурс повинен підтримувати звичайні операції HTTP. Ресурси ідентифікуються за допомогою глобальних ідентифікаторів (зазвичай це URI).
REST дозволяє, щоб ресурси мали різні представлення, наприклад, текст, XML, JSON тощо. Клієнт REST може запросити конкретне представлення через протокол HTTP (узгодження контенту).
Методи HTTP:
Методи PUT, GET, POST та DELETE типово застосовуються в архітектурах, заснованих на REST. У наступній таблиці наведено пояснення цих операцій.
REST означає Representational передачі стану .
Він покладається на протокол зв'язку без клієнта-сервера, кешований протокол зв'язку - і практично у всіх випадках використовується протокол HTTP.
REST часто використовується в мобільних додатках, веб-сайтах соціальних мереж, інструментах мешання та автоматизованих бізнес-процесах. Стиль REST підкреслює, що взаємодія між клієнтами та службами посилюється за рахунок обмеженої кількості операцій (дієслів). Гнучкість забезпечується шляхом призначення ресурсам (іменникам) власних унікальних універсальних індикаторів ресурсів (URI).
Розмова - це більше, ніж просто обмін інформацією . Протокол насправді розроблений так, що ніяких розмов не має відбуватися. Кожна сторона знає, яка саме їх робота, тому що це зазначено в протоколі. Протоколи дозволяють проводити чистий обмін інформацією за рахунок будь-яких змін можливих дій. З іншого боку, розмови дозволяють одній стороні запитати, які подальші дії можна вжити від іншої сторони. Вони навіть можуть задати одне і те ж питання двічі і отримати дві різні відповіді, оскільки держава іншої сторони, можливо, змінилася тимчасово. Говорячи - це RESTful архітектура . Дисертація Філдінга вказує на архітектуру, якої потрібно було б дотримуватися, якби хотіли дозволити машинам спілкуватися між собою, а не простоспілкуватися .
Сам по собі не існує такого поняття, як "RESTful програмування". Було б краще назвати парадигмою RESTful або ще краще RESTful архітектурою. Це не мова програмування. Це парадигма.
В обчислювальній техніці передавальний стан передачі (REST) - це архітектурний стиль, який використовується для веб-розробки.
Суть у тому, що якщо ми погоджуємось використовувати загальну мову для основних операцій (http-дієслова), інфраструктуру можна налаштувати на їх розуміння та оптимізацію належним чином, наприклад, використовуючи заголовки кешування для здійснення кешування взагалі рівні.
Якщо правильно реалізована спокійна операція GET, це не має значення, чи інформація надходить із БД вашого сервера, пам'яті вашого сервера, CDN, кеша проксі, кеша браузера або локальної пам’яті вашого браузера. Можна використовувати найшвидше доступне сучасне джерело.
Якщо сказати, що відпочинок - це лише синтаксична зміна від використання GET-запитів з параметром дії до використання доступних http дієслів, то це виглядає так, що він не має ніяких переваг і є чисто косметичним. Сенс у тому, щоб використовувати мову, яку можна зрозуміти та оптимізувати кожну частину ланцюга. Якщо ваша операція GET має побічні ефекти, вам доведеться пропустити всі кешування HTTP, або ви отримаєте непослідовні результати.
Що таке тестування API ?
Тестування API використовує програмування для відправки дзвінків в API та отримання доходу. Це тестування розглядає сегмент, що випробовується, як чорний ящик. Завдання тестування API - підтвердити правильність виконання та грубої обробки частини, що передує її узгодженням у програмі.
REST API
ВІДПОВІДЬ: Представницький державний трансфер
4 Найпоширеніші методи API:
Крок до ручного тестування API: -
Щоб використовувати API вручну, ми можемо використовувати додатки REST API на основі браузера.
Це дуже рідко згадується скрізь, але Модель зрілості Річардсона - один з найкращих методів насправді судити про те, наскільки Restful - це API. Більше про це тут:
Я б сказав, що важливий складовий елемент у розумінні REST лежить у кінцевих точках чи картах, таких як /customers/{id}/balance
.
Ви можете уявити собі таку кінцеву точку, як з'єднувальний трубопровід від веб-сайту (передній) до вашої бази даних / сервера (бек-енд). Використовуючи їх, фронт-енд може виконувати операції, що визначаються у відповідних методах будь-якого відображення REST у вашій програмі.