Що саме таке RESTful програмування?


3983

Що саме таке RESTful програмування?


3
дивіться також відповідь за наступним посиланням stackoverflow.com/a/37683965/3762855
Ciro Corvino

3
REST, можливо, трохи старіє;) youtu.be/WQLzZf34FJ8
Vlady Veselinov

1
Також перейдіть за цим посиланням для отримання додаткової інформації news.ycombinator.com/item?id=3538585
Ashraf.Shk786


5
@ OLIVER.KOO приємне спостереження. Просто я запитав це в той час, коли це було щось нове. Це було багато кинуто навколо, але не багато людей знали, про що йдеться. Принаймні, я цього не зробив, і здається, що запитання про це їм допомогло, бо вони також хотіли знати.
hasen

Відповіді:


743

Архітектурний стиль називається 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 .


2
Прослуховування доступних операцій з ідентифікацією: GET (Safe), PUT & DELETE (Виняток вказано в цьому посиланні restapitutorial.com/lessons/idempotency.html). Додаткова довідка щодо безпечних та безвідмовних методів w3.org/Protocols/rfc2616/rfc2616-sec9.html
Abhijeet

5
а) важливим моментом щодо GET є безпека, а не ідентифікація, б) @Abhijeet: RFC 2616 був застарілий у 2014 році; див. RF 7230ff.
Джуліан Решке

12
Це неправильно. Прочитайте це для правильної інтерпретації REST roy.gbiv.com/untangled/2008/rest-apis-must-be-hypertext-driven або цього stackoverflow.com/questions/19843480 / ...
kushalvm

4
@kushalvm Це академічне визначення REST не використовується на практиці.
Войовничий шимпанзе

3
Ефективно ми можемо задатися питанням, чи поняття функціонує, оскільки ми не можемо просто дати йому стійке та зрозуміле для всіх визначення
HoCo_

2918

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 зазвичай впроваджувався кілька років тому, коли я Спочатку написав це, а не справжнє його значення. Я переглянув відповідь, щоб краще представити реальний сенс.)


178
Ні. REST не просто з’явився як чергова модна мова. Він з'явився як засіб опису альтернативи обміну даними на основі SOAP. Термін REST допомагає обрамляти дискусію про спосіб передачі та доступу до даних.
tvanfosson

111
Тим не менш, серцем REST (у практичному застосуванні) є "не використовуйте GET для внесення змін, використовуйте POST / PUT / DELETE", що є порадою, яку я чув (і слідкував) ще задовго до появи SOAP. REST вже завжди був там, він просто не отримав назву за «шлях, щоб зробити це» до недавнього часу .
Дейв Шерохман

37
Не забувайте "Гіпертекст як двигун стану додатків".
Хенк Гей

45
Ця відповідь пропускає суть. HTTP ледь згадується в дисертації Філдінга.
користувач359996

18
Ця відповідь не згадує мету REST, а також здається, що це все стосується чистих URI. Хоча це може бути популярним сприйняттям REST, відповіді Д.Шоулі та «олюї» є більш точними - йдеться про те, щоб мати можливість скористатися функціями, вбудованими в архітектуру, як кешування, працюючи з нею, а не проти неї. Гарні URI - це переважно поширений побічний ефект.
TR

534

RESTful програмування про:

  • ресурси, визначені стійким ідентифікатором: URI - це всюдисущий вибір ідентифікатора в наші дні
  • ресурси , маніпулюють з допомогою загального набору дієслів: HTTP методи є зазвичай розглядається випадок - поважний Create, Retrieve, Update, Deleteстає POST, GET, PUT, і DELETE. Але REST не обмежується HTTP, це просто найчастіше використовується транспорт зараз.
  • фактичне представлення, отримане для ресурсу, залежить від запиту, а не ідентифікатора: використовуйте Accept заголовки, щоб контролювати, чи хочете ви XML, HTTP або навіть Java-об’єкт, що представляє ресурс
  • підтримання стану в об'єкті та представлення держави в поданні
  • репрезентація взаємозв'язків між ресурсами при поданні ресурсу: зв’язки між об'єктами вбудовуються безпосередньо в уявлення
  • представлення ресурсів описує, як представництво може бути використане та за яких обставин слід послідовно відкидати / повторно відновлювати: використання заголовків кеш-керування HTTP

Остання, мабуть, є найбільш важливою з точки зору наслідків та загальної ефективності REST. Загалом, більшість RESTful дискусій, схоже, зосереджена на HTTP та його використанні з браузера, а що ні. Я розумію, що Р. Філдінг придумав цей термін, коли він описав архітектуру та рішення, які призводять до HTTP. Його теза стосується більше архітектури та кеш-здатності ресурсів, ніж про HTTP.

Якщо вас справді цікавить, що таке архітектура RESTful і чому вона працює, прочитайте її дисертацію кілька разів і прочитайте всю річ не лише Главу 5! Далі розберемося, чому працює DNS . Прочитайте про ієрархічну організацію DNS та про те, як працюють реферали. Потім прочитайте та розгляньте, як працює кешування DNS. Нарешті, прочитайте специфікації HTTP (зокрема RFC2616 та RFC3040 ) та подумайте, як і чому кешування працює так, як це робиться. Зрештою, він просто натисне. Остаточне відкриття для мене було, коли я побачив схожість між DNS та HTTP. Після цього розуміння того, чому інтерфейси передачі SOA та повідомлень масштабовані, починає клацати.

Я думаю, що найважливіший трюк для розуміння архітектурної важливості та наслідків для архітектури RESTful та Shared Nothing - це уникати зависання технологій та деталей реалізації. Концентруйтеся на тому, хто володіє ресурсами, хто відповідає за їх створення / підтримку тощо. Потім подумайте про представлення, протоколи та технології.


36
Відповідь, що надає список для читання, дуже підходить для цього питання.
ellisbben

25
Дякуємо за оновлення. PUTі POSTнасправді не пов'язуйте один з одним оновлення та створення. PUTможна використовувати для створення, якщо клієнт диктує, яким буде URI. POSTстворюється, якщо сервер призначає новий URI.
Д.Шоулі

8
Не забудьте ПАТЧ.
епітка

4
URN - це URI, який використовує urn:схему. Концептуально різниці немає; однак URN вимагає, щоб у вас був окремо визначений метод, щоб "знайти" ресурс, ідентифікований (названий) URN. Потрібно бути обережним, щоб не вводити неявну зв'язок при зв’язуванні названих ресурсів та їх розташування.
Д.Шоулі

2
@ellisbben Погодився. Якщо я правильно розумію, це дисертація, яка породила REST: ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm
Філіп

408

Ось як це може виглядати.

Створіть користувача з трьома властивостями:

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

39
Для мене ця відповідь захопила суть бажаної відповіді. Простий і прагматичний. Звичайно, існує безліч інших критеріїв, але наведений приклад - це чудовий запуск.
CyberFonic

92
В останньому прикладі використовується @pbreitenbach PUT fname=Jonny. Це встановить lnameі ageзначення за замовчуванням (можливо, NULL або порожній рядок, і ціле число 0), оскільки PUT перезаписується весь ресурс з даними представленого представлення. Це не те, що мається на увазі під "оновленням", щоб зробити реальне оновлення, використовуйте PATCHметод, оскільки це не змінює поля, які не вказані в представленні.
Ніколас Шенкс

24
Микола має рацію. Крім того, URI для першого POST, що створює користувача, повинен називатися користувачами, оскільки /user/1це не має сенсу, і в ньому повинен бути список /users. У 201 Createdтакому випадку відповідь має бути не лише ОК.
DanMan

1
Це лише приклад API, не обов'язково ПЕРШИЙ api. ПОЧАТОК має обмеження, яких він дотримується. Архітектура клієнт-сервер, без стану, кеш-здатність, багатошарова система, єдиний інтерфейс.
Радіація

Це дуже компактна відповідь, яка охоплювала всі методи доступу до сервлетів http
Хіманшу Ахуджа

181

Чудова книга про 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 та версії обговорюють розширюваність, версійність, еволюційність тощо через модифікованість


5
Я думаю, що ця відповідь стосується ключового моменту розуміння REST: що означає слово представницьке . Рівень 1 - ресурси говорять про державу . Рівень 2 - HTTP Verbs говорить про передачу ( зміна читання ). Рівень 3 - HATEOAS говорить про перенесення майбутніх передач через представлення (повернено JSON / XML / HTML), що означає, що вам відомо, як сказати наступний раунд розмови з поверненою інформацією. Тож REST читає: "(репрезентативний (передача стану))", а не "((стан репрезентації)").
lcn


136

Що таке 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 #.

Одне з найкращих посилань, яке я знайшов, коли намагаюся знайти простий реальний сенс відпочинку.

http://rest.elkstein.org/


Це дійсно стисла відповідь. Чи можете ви також описати, чому REST називається бездержавним?
Chaklader Asfak Arefe

89

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

18
Це "правильне використання HTTP", що не те саме, що "спокійне" (хоча це пов’язано з цим)
Julian Reschke

2
Ви також можете використовувати / user / del / 2 та / user / remove / 2 або ... GET / DELETE / PUT / POST - це лише стандартизований, "правильний" спосіб робити такі речі (і як каже Джуліан, це ще не все є в REST)
DBR

1
Звичайно, але це не привід уникати їх. REST просто заощаджує щоразу винаходити колесо. Для API REST - це чудово (послідовність!), Але для структуризації випадкових веб-сайтів це насправді не має значення, я б сказав (це може бути більше клопоту, ніж це варто)
09.09

14
Вадиме, це був би просто RPC. Також небезпечно використовувати GET для зміни даних, оскільки (серед інших причин) пошукова система може павучити ваші посилання на видалення та відвідувати їх усі.
aehlke

7
@aehlke - Я думаю, що справжнім питанням було б "Чому анонімний користувач має можливість видаляти записи з вашої системи?"
Спенсер Рупорт

68

Це програмування, де архітектура вашої системи відповідає стилю REST, викладеному Роєм Філдінгом у своїй дипломній роботі . Оскільки це архітектурний стиль, який описує Інтернет (більш-менш), його цікавить багато людей.

Відповідь бонуса: Ні. Якщо ви не вивчаєте архітектуру програмного забезпечення як академічну чи розробляєте веб-сервіси, насправді немає причин, щоб не почули цей термін.


2
але не прямолінійно .. ускладнює те, що потрібно.
hasen

4
Крім того, незважаючи на те, що терміни REST і RESTful зараз використовуються майже виключно у царині веб-додатків, технічно немає нічого, що прив'язує REST до HTTP.
Генк Гей

3
У блозі Fielding є кілька хороших, простіших для розуміння статей про REST та поширені помилки: roy.gbiv.com/untangled/2008/rest-apis-must-be-hypertext-driven
aehlke

3
@HankGay Я думаю, що причина не є більш езотеричною полягає в тому, що більшість розробників веб-служб бачать REST як чудове спрощення таких альтернатив, як SOAP. Вони не обов'язково дотримуються правильності всіх технічних даних REST - а це, ймовірно, зводить фанатиків REST з розуму - але в більшості випадків їм, мабуть, не потрібно хвилюватися з приводу таких речей, як переконання, що їх результати "включені у гіпермедіа".
moodboom

47

Я б сказав, що програмування 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 стає великим, може полегшити деякі почуття.


Ця стаття пояснює зв’язок між HTTP та REST freecodecamp.org/news/…
Лише ти

45

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

Тут є досить хороший приклад:

Пояснення 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.)


12
круті посилання, дякую. Я втомився від цих REST хлопців, які говорять, що якийсь приклад не є "REST-ful", але потім відмовляються говорити, як змінити приклад на REST-ful.
coder_tim

38

Що таке REST?

REST офіційними словами, REST - це архітектурний стиль, побудований на певних принципах, використовуючи нинішні основи “Web”. Існує 5 основних основ Інтернету, які використовуються для створення REST-послуг.

  • Принцип 1: Все - це ресурс У архітектурному стилі REST дані та функціональність вважаються ресурсами та доступ до них здійснюється за допомогою Уніфікованих ідентифікаторів ресурсів (URI), як правило, посилань в Інтернеті.
  • Принцип 2: кожен ресурс ідентифікується унікальним ідентифікатором (URI)
  • Принцип 3: Використовуйте прості та одноманітні інтерфейси
  • Принцип 4: Зв'язок здійснюється представництвом
  • Принцип 5: Бути без громадянства

1
Що Communication is Done by Representationозначає?
mendez7

33

Я бачу купу відповідей, які говорять про те, що розміщення всього про користувача 123 на ресурсі "/ user / 123" є RESTful.

Рой Філдінг, який придумав цей термін, каже, що API REST повинні керуватися гіпертекстом . Зокрема, "API REST не повинен визначати назви фіксованих ресурсів або ієрархії".

Отже, якщо ваш "/ user / 123" шлях жорстко кодується на клієнті, він насправді не RESTful. Гарне використання HTTP, можливо, може бути і ні. Але не ВІДПОВІДНО. Це має виходити з гіпертексту.


7
так .... як би цей приклад спокійний? як би ви змінили URL-адресу, щоб зробити його спокійним?
hasen

1
hasen: Використання одного ресурсу для всіх операцій може бути необхідним для RESTfulness, але недостатньо .
Кен

18
добре добре .. ви могли б пояснити далі? Який сенс говорити "не ці хлопці помиляються .. я знаю, що правильно", не кажучи, що ви знаєте (або вважаєте), що це правильно?
hasen

5
Я дав посилання на опис Філдінга. Я думав, що я сказав, що саме відповідне для інших відповідей: потрібно керуватися гіпертекстом. Якщо "/ user / 123" походить із якоїсь позамежової документації API, це не RESTful. Якщо він походить від ідентифікатора ресурсу у вашому гіпертексті, то він є.
Кен

1
Або ви можете скористатись точкою входу на зразок / users /, і вона дасть вам список ресурсів користувача та URI для кожного. Потім ресурси виявляються, а навігація керується гіпертекстом.
aehlke

26

Відповідь дуже проста: є дисертація, написана Роєм Філдінгом.] 1 У цій дисертації він визначає принципи REST. Якщо програма відповідає всім цим принципам, то це програма REST.

Термін RESTful був створений тому, що ppl вичерпав слово REST, називаючи їх не-REST-додатком як REST. Після цього термін RESTful також був вичерпаний. Сьогодні ми говоримо про Web API та Hypermedia API , тому що більшість так званих програм REST не відповідали HATEOAS частині єдиного обмеження інтерфейсу.

Обмеження REST такі:

  1. архітектура клієнт-сервер

    Тому він не працює, наприклад, з розетками PUB / SUB, він заснований на REQ / REP.

  2. спілкування без громадянства

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

  3. використання кешу, якщо можете

    Тож вам не доведеться подавати однакові запити знову і знову.

  4. єдиний інтерфейс як загальний контракт між клієнтом і сервером

    Договір між клієнтом та сервером не підтримується сервером. Іншими словами, клієнт повинен бути відірваний від реалізації послуги. Ви можете досягти цього стану, використовуючи стандартні рішення, наприклад стандарт 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, але не пов'язану підтримку даних.

  5. побудувати шарувату систему для збільшення масштабованості

    Система REST складається з ієрархічних шарів. Кожен шар містить компоненти, які використовують послуги компонентів, які перебувають у наступному шарі нижче. Таким чином, ви можете додавати нові шари та компоненти без особливих зусиль.

    Наприклад, є рівень клієнта, який містить клієнтів, а нижче - рівень обслуговування, який містить одну службу. Тепер ви можете додати кеш-пам'ять на стороні клієнта між ними. Після цього ви можете додати інший екземпляр служби та балансир навантаження тощо. Код клієнта та код послуги не зміняться.

  6. код на вимогу для розширення функціональності клієнта

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

Обмеження REST спричиняють надзвичайно масштабовану систему, в якій клієнти відключаються від впровадження послуг. Таким чином, клієнти можуть бути багаторазовими, як і браузери в Інтернеті. Клієнти та сервіси поділяють однакові стандарти та вокаби, тому вони можуть зрозуміти один одного, незважаючи на те, що клієнт не знає деталей щодо реалізації послуги. Це дає змогу створювати автоматизованих клієнтів, які можуть знайти та використовувати REST-послуги для досягнення своїх цілей. У довгостроковій перспективі ці клієнти можуть спілкуватися один з одним і довіряти один одному завдання, як і люди. Якщо ми додамо шаблони навчання для таких клієнтів, то результатом буде одне чи більше AI з використанням веб-машин замість одного серверного парку. Отже, наприкінці мрія Бернерса Лі: семантична павутина та штучний інтелект будуть реальністю. Тож у 2030 році ми закінчуємось скасованим Skynet. До того як ... ;-)


22

Програмування API RESTful (Представницький стан передачі) - це написання веб-додатків на будь-якій мові програмування, дотримуючись 5 основних принципів архітектурного стилю програмного забезпечення :

  1. Ресурс (дані, інформація).
  2. Унікальний глобальний ідентифікатор (усі ресурси унікальні ідентифіковані URI ).
  3. Уніфікований інтерфейс - використовувати простий і стандартний інтерфейс (HTTP).
  4. Представлення - все спілкування здійснюється представництвом (наприклад, XML / JSON )
  5. Без громадянства (кожен запит відбувається в повній ізоляції, простіше кешувати і балансувати навантаженням),

Іншими словами, ви пишете прості мережеві програми "точка-до-точка" через HTTP, які використовують дієслова, такі як GET, POST, PUT або DELETE, реалізуючи архітектуру RESTful, яка пропонує стандартизацію інтерфейсу, який піддається кожному "ресурсу". Це не що, використовуючи поточні функції Інтернету простим та ефективним способом (дуже успішна, перевірена та розподілена архітектура). Це альтернатива більш складним механізмам, таким як SOAP , CORBA та RPC .

Програмування RESTful відповідає дизайну веб-архітектури, і при правильному впровадженні воно дозволяє повністю скористатися масштабованою веб-інфраструктурою.


17

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

  1. Ресурси запитуються через URL-адреси.
  2. Протоколи обмежуються тим, що ви можете спілкуватися, використовуючи URL-адреси.
  3. Метадані передаються як пари іменних значень (розміщують дані та параметри рядка запиту).

Після цього легко впасти в дебати про адаптації, умови кодування та найкращі практики.

Цікаво, що в дисертації не згадуються операції HTTP POST, GET, DELETE або PUT. Це повинно бути чиїсь пізнішим тлумаченням "найкращої практики" для "єдиного інтерфейсу".

Що стосується веб-сервісів, то, здається, нам потрібен певний спосіб розрізнити архітектури на базі WSDL та SOAP, які додають інтерфейсу значні накладні витрати і, можливо, набагато непотрібні. Вони також потребують додаткових фреймворків та інструментів для розробників для реалізації. Я не впевнений, чи REST - це найкращий термін для розрізнення інтерфейсів здорового глузду та надмірно розроблених інтерфейсів, таких як WSDL та SOAP. Але нам щось потрібно.


17

REST - це архітектурна схема та стиль написання розподілених додатків. Це не стиль програмування у вузькому розумінні.

Скажімо, що ви використовуєте стиль REST - це схоже на те, що ви побудували будинок у певному стилі: наприклад, Tudor або Victorian. Як REST як програмний стиль, так і Tudor або Victorian як домашній стиль можна визначити якостями та обмеженнями, які їх складають. Наприклад, REST повинен мати відділення сервера клієнтів, де повідомлення самоописуються. У будинках у стилі Тюдора є фронтони, що перекриваються, та дахи, які круто вивернуті фронтовими фронтонами. Ви можете прочитати дисертацію Роя, щоб дізнатися більше про обмеження та якості, які складають REST.

REST на відміну від домашніх стилів проходив важкий час послідовно і практично застосовується. Це, можливо, було навмисно. Повністю залишаючи свою реалізацію на дизайнері. Отже, ви можете робити те, що хочете, до тих пір, поки не будете дотримуватися обмежень, викладених у дисертації, яку ви створюєте REST Systems.

Бонус:

Весь веб заснований на REST (або REST базувався на Інтернеті). Тому, як веб-розробник, ви можете знати про це, хоча писати хороші веб-додатки не потрібно.


17

Ось моя основна схема REST. Я намагався продемонструвати мислення кожного з компонентів в архітектурі RESTful, щоб зрозуміти концепцію більш інтуїтивно. Сподіваємось, це допомагає демістифікувати REST для деяких людей!

REST (Представницька державна передача) - це архітектура дизайну, яка визначає, як мережеві ресурси (тобто вузли, що обмінюються інформацією) проектуються та вирішуються. Взагалі архітектура RESTful робить це так, що клієнт (запитуючий апарат) і сервер (автовідповідач) можуть запитувати читання, запис та оновлення даних, без того, щоб клієнт знав, як працює сервер і сервер може передавати він повертається, не вимагаючи нічого знати про клієнта. Гаразд, круто ... але як це зробити на практиці?

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

  • Але щоб знайти будь-який даний ресурс і потім повідомити клієнтові, де цей ресурс живе, повинен бути універсальний спосіб спрямування на ресурси. Тут надходять універсальні ідентифікатори ресурсів (URI); вони в основному є унікальними адресами для пошуку ресурсів.

Але архітектура REST не закінчується! Хоча вищезазначене відповідає основним потребам того, що ми хочемо, ми також хочемо мати архітектуру, яка підтримує об'єм трафіку, оскільки будь-який даний сервер зазвичай обробляє відповіді від багатьох клієнтів. Таким чином, ми не хочемо переповнювати сервер, щоб він запам'ятав інформацію про попередні запити.

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

  • Щоб додатково полегшити напругу на нашому сервері від повторних обчислень, що вже були зроблені для даного клієнта, REST також дозволяє кешувати. В основному кешування означає зробити знімок початкової відповіді, що надається клієнтові. Якщо клієнт повторно подає той же запит, сервер може надати клієнту знімок, а не повторити всі обчислення, необхідні для створення початкової відповіді. Однак, оскільки це знімок, якщо знімок не закінчився - сервер встановлює час закінчення терміну дії - і відповідь оновлюється з початкового кешу (тобто запит дасть іншу відповідь, ніж кешована відповідь) , клієнт не побачить оновлення, поки кеш не закінчиться (або кеш не буде очищено) і відповідь не буде надано з нуля знову.

  • Останнє, що ви часто буваєте тут про RESTful архітектури, це те, що вони шаруються. Ми фактично вже неявно обговорювали цю вимогу під час обговорення взаємодії між клієнтом та сервером. В основному це означає, що кожен шар нашої системи взаємодіє лише з сусідніми шарами. Отже, в нашому обговоренні клієнтський рівень взаємодіє з нашим серверним рівнем (і навпаки), але можуть бути й інші серверні шари, які допомагають первинному серверу обробляти запит, з яким клієнт безпосередньо не спілкується. Швидше, сервер передає запит у міру необхідності.

Тепер, якщо все це звучить знайомо, то чудово. Протокол передачі гіпертексту (HTTP), який визначає протокол зв'язку через всесвітню мережу, є реалізацією абстрактного поняття архітектури RESTful (або екземпляра класу REST, якщо ви фанатик OOP, як я). У цій реалізації REST клієнт і сервер взаємодіють через GET, POST, PUT, DELETE тощо, які є частиною універсальної мови, і ресурси можуть бути вказані на використання URL-адрес.


15

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

Це був найкращий практичний підхід для вирішення фундаментальних змін програмування в епоху Інтернету. Щодо фундаментальних змін, Ерік Мейєр продемонстрував тут дискусію: http://www.infoq.com/interviews/erik-meijer-programming-language-design-effects-purance#view_93197 . Він узагальнює це як п’ять ефектів і представляє рішення шляхом проектування рішення на мові програмування. Рішення також може бути досягнуто на платформеному або системному рівні, незалежно від мови. Відпочиваючих можна розглядати як одне з рішень, яке було успішним у сучасній практиці.

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

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

Просто мій 2с.

Редагувати: ще два важливі аспекти:


1
MVC точка зору: Блог Rest Найгірші практики не запропонував прирівнюючи моделі і ресурси . У книзі " Дві ложки джанго" випливає, що API відпочинку - це перегляд, а не змішувати бізнес-логіку з поданням. Код програми повинен залишатися в додатку.
мінхуа


14

Це дивовижно довга "дискусія", але все ж таки досить заплутано.

ІМО:

1) Не існує такого поняття, як спокійне програмування, без великого спільного і багато пива :)

2) Представницький державний трансфер (REST) ​​- це архітектурний стиль, визначений у дисертації Роя Філдінга . Він має ряд обмежень. Якщо ваша Служба / Клієнт поважають їх, то це RESTful. Ось воно.

Ви можете узагальнити (значно) обмеження:

  • спілкування без громадянства
  • поважати специфікації HTTP (якщо використовується HTTP)
  • чітко повідомляє передані формати вмісту
  • використовувати гіпермедіа як двигун стану застосування

Є ще один дуже хороший пост, який добре пояснює речі.

Дуже багато відповідей копіюють / вставляють дійсну інформацію, змішуючи її та додаючи певну плутанину. Тут люди говорять про рівні, про URI-файли RESTFul (такого немає!), Застосовують методи HTTP GET, POST, PUT ... REST - це не про це чи не лише про це.

Наприклад, посилання - приємно мати гарний вигляд API, але врешті-решт клієнт / сервер насправді не піклується про посилання, які ви отримуєте / надсилаєте - це важливий вміст.

Зрештою, будь-який клієнт RESTful повинен мати можливість споживати будь-яку послугу RESTful до тих пір, поки не буде відомий формат вмісту.


14

Старе запитання, новий спосіб відповіді. Існує багато хибного уявлення про цю концепцію. Я завжди намагаюся пам'ятати:

  1. Структуровані URL-адреси та методи / дієслова Http - це не визначення спокійного програмування.
  2. JSON не є спокійним програмуванням
  3. RESTful програмування не для API

Я визначаю спокійне програмування як

Додаток є спокійним, якщо він забезпечує ресурси (будучи комбінацією даних + управління переходами стану) у мультимедійному типі, який клієнт розуміє

Щоб бути спокійним програмістом, ви повинні намагатися створювати додатки, які дозволяють акторам робити щось. Не лише оголення бази даних.

Управління переходом стану має сенс лише тоді, коли клієнт і сервер домовляються про представлення ресурсу типу медіа Інакше немає способу дізнатися, що таке контроль, а що ні, і як виконати контроль. IE, якщо веб-переглядачі не знали <form>тегів у html, тоді вам нічого не вдалося передати у стан переходу у вашому браузері.

Я не прагну самореклами, але я дуже широко розширюю ці ідеї в своїх розмовах http://techblog.bodybuilding.com/2016/01/video-what-is-restful-200.html .

Уривок з моєї бесіди - про часто згадувану модель зрілості Річардсона, я не вірю в рівні, ти або РЕСТАЛЬНИЙ (рівень 3), або ні, але те, що мені подобається викликати з цього приводу - це кожен рівень робить для вас на вашому шляху до RESTful

анотована модель зрілості Річардсона


12

REST визначає 6 архітектурних обмежень, які роблять будь-який веб-сервіс - справжнім RESTful API .

  1. Уніфікований інтерфейс
  2. Клієнт – сервер
  3. Без громадянства
  4. Кешований
  5. Багатошарова система
  6. Код на вимогу (необов’язково)

https://restfulapi.net/rest-architectural-constraints/


Філдінг додав ще кілька правил, яких повинні дотримуватися RESTful API / клієнти
Роман Воттнер

11

REST === HTTP-аналогія не є правильною, поки ви не наголосите на тому, що вона "ОБОВ'ЯЗКОВО" повинна бути керована HATEOAS .

Рой сам це очистив тут .

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

[Невдача тут означає, що інформація про позадіапазон є рушійною взаємодією замість гіпертексту.]


не відповідає на запитання так само, як і інші, але +1 за релевантну інформацію!
KGCybeX

Я думаю, що це відповідає і на питання, але, наприклад, відсутність безгромадянства у ньому. Кожне обмеження є важливим ... Стандартна частина засобів масової інформації не завжди відповідає дійсності. Я маю на увазі, що є шари розуміння. Наприклад, якщо ви використовуєте RDF, то тип медіа можна зрозуміти, але значення вмісту немає. Тому клієнт також повинен знати словниковий запас. Деякі люди експериментують з подібними API REST та загальним REST vocab для опису гіперпосилань тощо. Hydra-cg.com
inf3rno

11

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. У наступній таблиці наведено пояснення цих операцій.

  • GET визначає доступ до читання ресурсу без побічних ефектів. Ресурс ніколи не змінюється за допомогою GET-запиту, наприклад, запит не має побічних ефектів (idempotent).
  • PUT створює новий ресурс. Він також повинен бути безсильним.
  • DELETE видаляє ресурси. Операції ідентичні. Вони можуть повторитися, не приводячи до різних результатів.
  • POST оновлює наявний ресурс або створює новий ресурс.

Кілька цитат, але жодного джерела не згадується. Де ти це взяв?
djvg

10

REST означає Representational передачі стану .

Він покладається на протокол зв'язку без клієнта-сервера, кешований протокол зв'язку - і практично у всіх випадках використовується протокол HTTP.

REST часто використовується в мобільних додатках, веб-сайтах соціальних мереж, інструментах мешання та автоматизованих бізнес-процесах. Стиль REST підкреслює, що взаємодія між клієнтами та службами посилюється за рахунок обмеженої кількості операцій (дієслів). Гнучкість забезпечується шляхом призначення ресурсам (іменникам) власних унікальних універсальних індикаторів ресурсів (URI).

Вступ про відпочинок


10

Розмова - це більше, ніж просто обмін інформацією . Протокол насправді розроблений так, що ніяких розмов не має відбуватися. Кожна сторона знає, яка саме їх робота, тому що це зазначено в протоколі. Протоколи дозволяють проводити чистий обмін інформацією за рахунок будь-яких змін можливих дій. З іншого боку, розмови дозволяють одній стороні запитати, які подальші дії можна вжити від іншої сторони. Вони навіть можуть задати одне і те ж питання двічі і отримати дві різні відповіді, оскільки держава іншої сторони, можливо, змінилася тимчасово. Говорячи - це RESTful архітектура . Дисертація Філдінга вказує на архітектуру, якої потрібно було б дотримуватися, якби хотіли дозволити машинам спілкуватися між собою, а не простоспілкуватися .


10

Сам по собі не існує такого поняття, як "RESTful програмування". Було б краще назвати парадигмою RESTful або ще краще RESTful архітектурою. Це не мова програмування. Це парадигма.

З Вікіпедії :

В обчислювальній техніці передавальний стан передачі (REST) ​​- це архітектурний стиль, який використовується для веб-розробки.


9

Суть у тому, що якщо ми погоджуємось використовувати загальну мову для основних операцій (http-дієслова), інфраструктуру можна налаштувати на їх розуміння та оптимізацію належним чином, наприклад, використовуючи заголовки кешування для здійснення кешування взагалі рівні.

Якщо правильно реалізована спокійна операція GET, це не має значення, чи інформація надходить із БД вашого сервера, пам'яті вашого сервера, CDN, кеша проксі, кеша браузера або локальної пам’яті вашого браузера. Можна використовувати найшвидше доступне сучасне джерело.

Якщо сказати, що відпочинок - це лише синтаксична зміна від використання GET-запитів з параметром дії до використання доступних http дієслів, то це виглядає так, що він не має ніяких переваг і є чисто косметичним. Сенс у тому, щоб використовувати мову, яку можна зрозуміти та оптимізувати кожну частину ланцюга. Якщо ваша операція GET має побічні ефекти, вам доведеться пропустити всі кешування HTTP, або ви отримаєте непослідовні результати.


5
"Говорячи, що відпочинок - це лише синтаксична зміна ... виглядає так, що він не має жодних переваг і є чисто косметичним" --- саме тому я читаю відповіді тут на ТАК. Зауважте, що ви не пояснили, чому REST не є суто косметичним.
osa

5

Що таке тестування API ?

Тестування API використовує програмування для відправки дзвінків в API та отримання доходу. Це тестування розглядає сегмент, що випробовується, як чорний ящик. Завдання тестування API - підтвердити правильність виконання та грубої обробки частини, що передує її узгодженням у програмі.

REST API

ВІДПОВІДЬ: Представницький державний трансфер

  • Це розташування функцій, за якими тестувальник виконує запити та отримує відповіді. У API REST взаємодії здійснюються за допомогою протоколу HTTP.
  • REST також дозволяє спілкуватися між комп'ютерами один з одним по мережі.
  • Для надсилання та прийому повідомлень воно передбачає використання методів HTTP, і воно не вимагає чіткого визначення повідомлення, на відміну від веб-служб.
  • Повідомлення REST часто приймають форму або у вигляді XML, або як JavaScript-об'єктна нотація (JSON).

4 Найпоширеніші методи API:

  1. GET: - Він забезпечує доступ лише до читання до ресурсу.
  2. POST: - Він використовується для створення або оновлення нового ресурсу.
  3. PUT: - Він використовується для оновлення або заміни існуючого ресурсу або створення нового ресурсу.
  4. DELETE: - Він використовується для видалення ресурсу.

Крок до ручного тестування API: -

Щоб використовувати API вручну, ми можемо використовувати додатки REST API на основі браузера.

  1. Встановіть плагін POSTMAN (Chrome) / REST (Firefox)
  2. Введіть URL-адресу API
  3. Виберіть метод REST
  4. Виберіть вміст-заголовок
  5. Введіть запит JSON (POST)
  6. Клацніть на надіслати
  7. Він поверне вихідну відповідь

Кроки до автоматизації API REST


5
це навіть не є правильною відповіддю
пращур

5

Це дуже рідко згадується скрізь, але Модель зрілості Річардсона - один з найкращих методів насправді судити про те, наскільки Restful - це API. Більше про це тут:

Модель зрілості Річардсона


Якщо ви подивитесь на обмеження Fielding, нанесені на REST, ви чітко побачите, що API повинен досягти рівня 3 RMM, щоб його можна було розглядати як RESTful, хоча цього просто недостатньо насправді, оскільки є ще достатньо можливостей для виходу з ладу Ідея REST - від'єднання клієнтів від серверних API. Впевнений, 3 рівень виконує обмеження HATEOAS, але все ж легко порушити вимоги та щільно
з'єднати

2

Я б сказав, що важливий складовий елемент у розумінні REST лежить у кінцевих точках чи картах, таких як /customers/{id}/balance.

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

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