Слайд 2
![REST API](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/139084/slide-1.jpg)
Слайд 3
![REST - что это? Representational State Transfer — «передача репрезентативного](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/139084/slide-2.jpg)
REST - что это?
Representational State Transfer — «передача репрезентативного состояния». Метод
взаимодействия компонентов распределённого приложения в сети Интернет, при котором вызов удаленной процедуры представляет собой обычный HTTP-запрос (обычно GET или POST; такой запрос называют REST-запрос), а необходимые данные передаются в качестве параметров запроса.
Этот способ является альтернативой более сложным методам, таким как SOAP, CORBA и RPC. В широком смысле REST означает концепцию построения распределённого приложения, при которой компоненты взаимодействуют наподобие взаимодействия клиентов и серверов во Всемирной паутине.
Слайд 4
![Всем нужен сервер](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/139084/slide-3.jpg)
Слайд 5
![REpresentational State Transfer === CRUD](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/139084/slide-4.jpg)
REpresentational State Transfer === CRUD
Слайд 6
![Что внутри в двух словах http://api/ {название ресурса}/{уникальный идентификатор} ?параметр=значение](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/139084/slide-5.jpg)
Что внутри в двух словах
http://api/
{название ресурса}/{уникальный идентификатор}
?параметр=значение
Слайд 7
![Что внутри в двух словах GET Отдай ресурс Отдай событие](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/139084/slide-6.jpg)
Что внутри в двух словах
GET
Отдай ресурс
Отдай событие
POST / PUT
Создай ресурс
Создай событие
Слайд 8
![Что внутри в двух словах PATCH / PUT Обнови ресурс](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/139084/slide-7.jpg)
Что внутри в двух словах
PATCH / PUT
Обнови ресурс
Создай если её нет
DELETE
Удали
ресурс
Слайд 9
![Что внутри в двух словах HEAD Отдай ресурс Отдай событие](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/139084/slide-8.jpg)
Что внутри в двух словах
HEAD
Отдай ресурс
Отдай событие
Но всё это без содержимого,
только заголовки
CONNECT
Создай подключение TCP/IP tunnel или HTTPS
OPTIONS
Покажи доступные мне методы
TRACE
Верни мне что я тебе прислал
Слайд 10
![REST - не стандарт](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/139084/slide-9.jpg)
Слайд 11
![REST - не стандарт Все является ресурсами с уникальным идентификатором](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/139084/slide-10.jpg)
REST - не стандарт
Все является ресурсами с уникальным идентификатором (URL)
Все операции
- это ресуры или сущности
Любой запрос это CRUD
Слайд 12
![GET GET /resource Отдать данные так как задумано сервером GET](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/139084/slide-11.jpg)
GET
GET /resource
Отдать данные так как задумано сервером
GET /resource/{id}
Уникальный идентификатор это ID,
hash, slug, username - что-то уникальное что является идентификатором
GET /resource/{id_1},{id_2},{id_3}
Клиент хочет несколько ресурсов, отдай их массивом
Слайд 13
![GET GET /tavern/Admiral_Benbow/checkin Посмотреть все чекины данном месте GET /pirate/Billy_Bones/checkin](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/139084/slide-12.jpg)
GET
GET /tavern/Admiral_Benbow/checkin
Посмотреть все чекины данном месте
GET /pirate/Billy_Bones/checkin
Посмотреть все чекины пользователя
GET /pirate/Billy_Bones/checkin/Admiral_Benbow
Посмотреть
есть ли чекин пользователя в данной местности вернув запись
Слайд 14
![GET http://api/user/12345 я знаю сколько у тебя пользователей http://api/user/@HanSolo я](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/139084/slide-13.jpg)
GET
http://api/user/12345
я знаю сколько у тебя пользователей
http://api/user/@HanSolo
я знаю имя
пользователя или логин или email
Слайд 15
![GET http://api/tavern/4 { "status": "ok", "data": [ { "id": "abcd-efgh",](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/139084/slide-14.jpg)
GET
http://api/tavern/4
{
"status": "ok",
"data": [
{
"id": "abcd-efgh",
"name": "Tavern 'Dancing
fairy'"
}
],
"next": "http://api/tavern/?offset=5",
"prev": "http://api/tavern/?offset=3",
}
Слайд 16
![GET DELETE /account/{id} удаляем пользователя DELETE /account/{id_1},{id_2},{id_3} удаляем много пользователей](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/139084/slide-15.jpg)
GET
DELETE /account/{id}
удаляем пользователя
DELETE /account/{id_1},{id_2},{id_3}
удаляем много пользователей
DELETE /account
удалить все
записи ресурса (!!!)
DELETE /account/{id}/avatar
удаляем аватарку
DELETE /account/{id}/avatar/*
удалить все аватарки
Слайд 17
![Вложенные данные [ {"name": "Jay", "phrase": [1, 2]}, {"name": "Silent](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/139084/slide-16.jpg)
Вложенные данные
[
{"name": "Jay", "phrase": [1, 2]},
{"name": "Silent Bob", "phrase":
["..."]},
{"name": "Metatron", "phrase":
{"5": "Behold, the Metatron!",
"6": "Metatron acts as the voice of God."}},
{"name": "Azrael",
"phrase": ["http://api/phrase/7",
"http://api/phrase/8"]}
]
Слайд 18
![Разбиение на страницы { "pagination": { "total": 1003, "per_page": 10,](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/139084/slide-17.jpg)
Разбиение на страницы
{
"pagination": {
"total": 1003,
"per_page": 10,
"total_pages": 100,
"current_page": 3,
"next_page": 4,
"prev_page": 2,
"next_url": "http://api/resource/:page/4",
"prev_url": "http://api/resource/:page/2"
}
}
Слайд 19
![За пределами CRUD](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/139084/slide-18.jpg)
Слайд 20
![Версионирование API URL https://api/v1.0.5/resource https://api/v2.1.9/resource/123456 Параметр https://api/resource?v=3.2.6 Заголовки Accept: application/json;version=v1.2.4 Accept: application/json;api=NameOfMyApi;version=v1.4.6](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/139084/slide-19.jpg)
Версионирование API
URL
https://api/v1.0.5/resource
https://api/v2.1.9/resource/123456
Параметр
https://api/resource?v=3.2.6
Заголовки
Accept: application/json;version=v1.2.4
Accept: application/json;api=NameOfMyApi;version=v1.4.6
Слайд 21
![Поиск http://api.domain.my/:search/?what=articles&text=Tolkien*&request_id=123456 202 Accepted { "incremental_call": 60000, "left": 53, "per_day": 200 }](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/139084/slide-20.jpg)
Поиск
http://api.domain.my/:search/?what=articles&text=Tolkien*&request_id=123456
202 Accepted
{
"incremental_call": 60000,
"left": 53,
"per_day": 200
}
Слайд 22
![Ошибки { "status": "Forbidden", "http_code": 403, "code": "SESSION_EXPIRED", "type": "OAuthException",](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/139084/slide-21.jpg)
Ошибки
{
"status": "Forbidden",
"http_code": 403,
"code": "SESSION_EXPIRED",
"type": "OAuthException",
"message": "Session
has expired"
}
{
"status": "OK",
"http_code": 404,
"code": «DEPRECATED_API_VERSION",
"type": "APIException",
"message": "This API version is no longer supported"
}
Слайд 23
![Документирование REST API](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/139084/slide-22.jpg)
Документирование REST API
Слайд 24
![Документирование REST API Код постоянно меняется Время на документацию не](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/139084/slide-23.jpg)
Документирование REST API
Код постоянно меняется
Время на документацию не выделяют
Документация не успевает
за изменениями
Никто не умеет писать документацию
Когда начинать вести документацию?
Не хочу писать документацию
Слайд 25
![Service-Oriented Architecture HATEOAS “Hypermedia as the Engine of Application State” JSON Schema JSON Hyper-Schema](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/139084/slide-24.jpg)
Service-Oriented Architecture
HATEOAS
“Hypermedia as the Engine of Application State”
JSON Schema
JSON Hyper-Schema
Слайд 26
![GET OPTIONS http://api/user { "title": "User", "type": "object", "description": "Service](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/139084/slide-25.jpg)
GET OPTIONS http://api/user
{
"title": "User",
"type": "object",
"description": "Service User",
"properties": {
"firstName": {"type": "string"},
"age": {
"description": "Age in years",
"type": "integer",
"minimum": 0
}
},
"required": ["firstName", "age"]
}
Слайд 27
![GET OPTIONS http://api/product HTTP/1.1 200 OK Host: api.example.com Content-Type: application/json Cache-Control: no-cache, private X-Methods: GET,POST,PUT,PATCH,DELETE](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/139084/slide-26.jpg)
GET OPTIONS http://api/product
HTTP/1.1 200 OK
Host: api.example.com
Content-Type: application/json
Cache-Control: no-cache, private
X-Methods: GET,POST,PUT,PATCH,DELETE
Слайд 28
![Apache Cordova](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/139084/slide-27.jpg)
Слайд 29
![Apache Cordova — это платформа разработки мобильных приложений с открытым](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/139084/slide-28.jpg)
Apache Cordova — это платформа разработки мобильных приложений с открытым исходным
кодом. Она позволяет использовать стандартные веб-технологии для кросс платформенной разработки, избегая родного языка разработки для каждой из мобильных платформ. Приложения выполняются внутри обертки нацеленной на каждую платформу и полагаются на стандартные API для доступа к датчикам устройства, данным и состоянию сети.
Слайд 30
![Основные принципы Разработка ведется с использованием стека технологий HTML, CSS,](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/139084/slide-29.jpg)
Основные принципы
Разработка ведется с использованием стека технологий HTML, CSS, Javascript
Компиляция в
нативное приложение возможно только при наличии необходимого SDK
Имеет большой набор плагинов для использования «системного javascript»
Слайд 31
![Cordova: Плюсы Удобная разработка: Нет необходимости постоянно компилировать проект, разработка](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/139084/slide-30.jpg)
Cordova: Плюсы
Удобная разработка:
Нет необходимости постоянно компилировать проект, разработка ведется прямо в
браузере
Наиболее адекватный порог вхождения
Плагины
Отладка уже запущенного приложения прямо из браузера
Слайд 32
![Cordova: минусы Нативное приложение представляет собой форму с «натянутым» Web-view,](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/139084/slide-31.jpg)
Cordova: минусы
Нативное приложение представляет собой форму с «натянутым» Web-view, что означает
всю работу внутри одного Activity
Чуть медленная производительность по сравнению с нативным приложением
Функциональность зависит от текущей ОС и функции браузера
Подписка на PUSH уведомления при выключенной программе (на стадии доработки)
Слайд 33
![IONIC FRAMEWORK](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/139084/slide-32.jpg)