9.5 KiB
title: Networks class: animation-fade layout: true
class: impact
HTTP
и сын его REST
Зачем HTTP?
--
- Чтобы Г̹̲͇̾̚И̩̙͔̼̻̠̊͛П̫ͦ̐Е̣̊͛̌̏ͨР̮͎̱̦̗ͨ̿̐̉М͎̮̀͒̔ͫ̍Е͈̼̳̬ͨ͊ͩ̎̎̆Д̼͖͖̲̗̒И͌̐ͧА̾̈
--
- Очень много крайне различной информации
--
- Много разных агентов c различными задачами
--
- Малый порог входа и участия
Что такое HTTP?
По крайней мере HTTP/1.1. 😓
Задачи
--
- Организовать обмен ГИПЕРМЕДИА
--
- Обеспечить равноправие различных агентов
--
- Дать возможность плавной эволюции протокола и систем
--
- Минимизировать порог входа
Что такое HTTP?
Участники
--
- пользователькие агенты
--
- веб-сервисы
--
- посредники
- прокси
- кэширующие сервера
- файрволлы
Что такое HTTP?
Сообщения и формат данных
--
GET /user HTTP/1.1
Host: api.github.com
User-Agent: insomnia/5.16.6
Accept: application/vnd.github.v3+json
Authorization: token 17561dd75d2d4ca18162aa0ee6689ad352f7c716
Что такое HTTP?
Сообщения и формат данных
HTTP/1.1 200 OK
Server: GitHub.com
Date: Mon, 30 Jul 2018 19:07:46 GMT
Content-Type: application/json; charset=utf-8
Content-Length: 1173
X-RateLimit-Limit: 5000
X-RateLimit-Remaining: 4999
X-RateLimit-Reset: 1532981266
Cache-Control: private, max-age=60, s-maxage=60
Vary: Accept, Authorization, Cookie, X-GitHub-OTP
ETag: "43e7e661929a522cbf07d1254805b17e"
Last-Modified: Wed, 11 Jul 2018 15:47:47 GMT
... куча байтов тела ответа ...
Зачем REST?
--
- Очень много участников
--
- Очень часто появляются новые
--
- Очень много способов решить задачу
--
- Крайне мало средств общаться на "одном языке"
Что такое REST?
--
- Клиент-серверная архитектура систем
--
- Коммуникация посредством явной передачи состояния
--
- Средства для явного, предсказуемого и безопасного кэширования
--
- Многоуровневая архитектура с разделением задач между уровнями
--
- Унифицированный интерфейс
Унифицированный интерфейс
--
- Ресурсы и их расположения в сети
--
- Представления ресурсов
--
- Явные и понятные учатникам без предварительного знания сообщения
--
- Ḥ̹̮͖ͬͧ̆ͧA̦͍͕̮͊́ͦ̆ͯT̹̘̭̱̪ͫE̲͎̖͇̦͋̇̓O̬̻͕̩̣̗ͨ͑̃ͤÂ͐S̯̘̘̟̪͔̀͊́ͤ
Ресурсы и их расположения
URL
URI = scheme:[//authority]path[?query][#fragment]
authority = [userinfo@]host[:port]
--
Примеры
-
Github Repository Issues
https://github.com/stevemao/left-pad/issues
--
-
Github Logged-in User Settings
https://github.com/settings/profile
Представления ресурсов
GET /v0/item/17621448.json?print=pretty HTTP/1.1
Host: hacker-news.firebaseio.com
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,ru-RU;q=0.8,ru;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate, br
HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
Content-Length: 697
{
"by" : "captain_perl",
"id" : 17621448,
"kids" : [ 17621675, 17621623 ],
"parent" : 17620543,
"text" : "Just for the record, I surveyed a dozen Hipchat users who used it all day in late 2016 for software development. They had zero complaints about using Hipchat.<p>My opinion of the Hipchat web client at the time was that it worked fine (no complaints from me.)<p>I believe we were on the free tier, so that was a great deal.<p>A new Eng. VP wanted to seem hip, so he switched us to Slack "to ensure we were using the best tools possible."<p>Nobody said that Slack was better or added any features that were worth mentioning.",
"time" : 1532640989,
"type" : "comment"
}
Понятные сообщения
Методы
--
- GET
Получить представление ресурса, расположенного по URL. В ответе присутствует тело с представлением ресурса. -- Безопасный метод. -- Идемпотентный метод. -- Позволено кэшировать.
--
- HEAD
Получить метаданные ресурса, расположенного по URL. В ответе отсутствует тело с представлением ресурса. -- Безопасный метод. -- Идемпотентный метод. -- Позволено кэшировать.
--
- POST
Создать подресурс в рамках расположенного по URL ресурса согласно переданному представлению. В ответе присутствует тело с представлением созданного ресурса. -- Небезопасный метод. -- Неидемпотентный метод. -- Позволено кэшировать.
Понятные сообщения
Методы
- PUT
Задать состояние расположенного по URL ресурса согласно переданному представлению. В ответе присутствует тело с представлением созданного или изменённого ресурса. -- Небезопасный метод. -- Идемпотентный метод. -- Недопустимо кэшировать.
--
- PATCH
Внести частичные изменения в состояние расположенного по URL ресурса согласно переданному представлению. В ответе присутствует тело с представлением созданного или изменённого ресурса. -- Небезопасный метод. -- Неидемпотентный метод. -- Недопустимо кэшировать.
--
- DELETE
Удалить расположенный по URL ресурс. В ответе отсутствует тело. -- Небезопасный метод. -- Идемпотентный метод. -- Недопустимо кэшировать.
Понятные сообщения
Классы ответов
-
1XX Informational
Информация для ознакомления. Обычно используется для согласования обновления прикладных протоколов.
--
-
2XX Success
Успех. Запрошенное агентом действие было корректно сформулировано, получено и успешно обработано.
--
-
3XX Redirection
Необходимы дополнительные действия, чаще всего используется для перенаправления агента для совершения действия над другим ресурсом.
Понятные сообщения
Классы ошибок
-
4XX Client Error
Агент допустил ошибку в процессе формирования запроса, его отправки или в результате попытки проведения действия, неприменимого к текущему состоянию ресурса. Чтобы добиться успеха, агент имеет возможность скорректировать свой запрос.
--
-
5XX Server Error
Сервер не в состоянии обработать запрос в результате какой-либо ошибки. Ошибочное состояние может быть постоянным или временным (транзиентная ошибка). Обычно агент не имеет возможности в итоге добиться успеха.
HATEOAS
Hypermedia as the engine of application state
When I say hypertext, I mean the simultaneous presentation of information and controls such that the information becomes the affordance through which the user (or automaton) obtains choices and selects actions.
Roy Fielding в своём блоге
--
https://apidocs.goabout.com
class: impact