SlideShare a Scribd company logo
1 of 83
Download to read offline
1
JSON-RPC
или когда REST неудобен
PyNSK #6
13.02.2016Александр Кацко
2
О себе
Александр Кацко
http://alexandr.katsko.name/
3
О себе
Александр Кацко
http://alexandr.katsko.name/
Опыт работ с API
4
Опыт работ с API
Проектирование и реализация API
Использование имеющегося API
5
Опыт работ с API
Проектирование и реализация API
Использование имеющегося API
Текстовый велосипед
JSON показался излишен, команд в протоколе было минимум,
потому API состоял из простых строк.
6
Опыт работ с API
Проектирование и реализация API
Использование имеющегося API
Текстовый велосипед
JSON показался излишен, команд в протоколе было минимум,
потому API состоял из простых строк.
JSON в своём формате, отправляемый на URL. НедоREST, недоRPC.
7
Опыт работ с API
Проектирование и реализация API
Использование имеющегося API
Текстовый велосипед
JSON показался излишен, команд в протоколе было минимум,
потому API состоял из простых строк.
JSON в своём формате, отправляемый на URL. НедоREST, недоRPC.
JSON-RPC
8
Опыт работ с API
Проектирование и реализация API
Использование имеющегося API
Текстовый велосипед
JSON показался излишен, команд в протоколе было минимум,
потому API состоял из простых строк.
JSON в своём формате, отправляемый на URL. НедоREST, недоRPC.
JSON-RPC
REST
9
Опыт работ с API
Проектирование и реализация API
Использование имеющегося API
Текстовый велосипед
JSON показался излишен, команд в протоколе было минимум,
потому API состоял из простых строк.
JSON в своём формате, отправляемый на URL. НедоREST, недоRPC.
JSON-RPC
REST
XML-RPC
10
Опыт работ с API
Проектирование и реализация API
Использование имеющегося API
Текстовый велосипед
JSON показался излишен, команд в протоколе было минимум,
потому API состоял из простых строк.
JSON в своём формате, отправляемый на URL. НедоREST, недоRPC.
JSON-RPC
REST
XML-RPC
Бинарные велосипеды
11
Опыт работ с API
Сфера применения
Браузер — сервер
HTTP, WebSockets
JSON, JSON-RPC, REST
12
Опыт работ с API
Сфера применения
Браузер — сервер
HTTP, WebSockets
JSON, JSON-RPC, REST
Сервер — сервер
HTTP
JSON-RPC, XML-RPC, недоREST
13
Опыт работ с API
Сфера применения
Браузер — сервер
HTTP, WebSockets
JSON, JSON-RPC, REST
Сервер — сервер
HTTP
JSON-RPC, XML-RPC, недоREST
Телефон — сервер
HTTP, Sockets
JSON-RPC, текстовый и бинарный велосипед
14
Опыт работ с API
Сфера применения
Браузер — сервер
HTTP, WebSockets
JSON, JSON-RPC, REST
Сервер — сервер
HTTP
JSON-RPC, XML-RPC, недоREST
Телефон — сервер
HTTP, Sockets
JSON-RPC, текстовый и бинарный велосипед
Десктоп — сервер — десктоп
WebSockets
JSON, JSON-RPC
15
Про какой API речь?
16
Про какой API речь?
API
Набор команд,
для использования
во внешних программах.
17
REST RPC
Два типа API
18
REST RPC
Два типа API
Адреса (ресурсы)
19
REST RPC
Два типа API
Адреса (ресурсы) Функции
20
REST RPC
Два типа API
Адреса (ресурсы) Функции
XML-RPC
SOAP
Thrift
JSON-RPC
21
REST RPC
Два типа API
Адреса (ресурсы) Функции
XML-RPC
SOAP
Thrift
JSON-RPC
Текущая версия 2.0 (Updated) 04.01.2013www.jsonrpc.org/specification
22
JSON-RPC v2.0
Формат данных
Транспорт
23
JSON-RPC v2.0
Формат данных — JSON
Транспорт
Это логотип JSON
24
JSON-RPC v2.0
Формат данных — JSON
Транспорт
www.json.org/json-ru.html
Это логотип JSON
25
JSON-RPC v2.0
Формат данных — JSON
Транспорт
www.json.org/json-ru.html
легко читается человеком, легко парсится машиной
Это логотип JSON
26
JSON-RPC v2.0
Формат данных — JSON
Транспорт
www.json.org/json-ru.html
легко читается человеком, легко парсится машиной
для работы с json есть много библиотек
Это логотип JSON
27
JSON-RPC v2.0
Формат данных — JSON
Транспорт
www.json.org/json-ru.html
легко читается человеком, легко парсится машиной
для работы с json есть много библиотек
а если под какой-то язык её нет, то её легко сделать, т.к. json - это текст
Это логотип JSON
28
JSON-RPC v2.0
Формат данных — JSON
Транспорт — любой
www.json.org/json-ru.html
легко читается человеком, легко парсится машиной
для работы с json есть много библиотек
а если под какой-то язык её нет, то её легко сделать, т.к. json - это текст
Это логотип JSON
29
JSON-RPC v2.0
Формат данных — JSON
Транспорт — любой
www.json.org/json-ru.html
легко читается человеком, легко парсится машиной
для работы с json есть много библиотек
а если под какой-то язык её нет, то её легко сделать, т.к. json - это текст
HTTP, Socket, WebSocket, электронная почта,
FTP, IP посредством почтовых голубей
Это логотип JSON
30
JSON-RPC v2.0
Транспорт — любой
HTTP, Socket, WebSocket, электронная почта,
FTP, IP посредством почтовых голубей
Доставляем JSON-RPC
31
JSON-RPC v2.0
Формат данных — JSON
Транспорт — любой
www.json.org/json-ru.html
легко читается человеком, легко парсится машиной
для работы с json есть много библиотек
а если под какой-то язык её нет, то её легко сделать, т.к. json - это текст
HTTP, Socket, WebSocket, электронная почта,
FTP, IP посредством почтовых голубей
Это логотип JSON
Простой формат и любой транспорт —
первая киллер-фича
32
Структура JSON-RPC v2.0
33
Структура JSON-RPC v2.0
Запрос
34
Структура JSON-RPC v2.0
Запрос
Ответ
35
Структура JSON-RPC v2.0
Запрос
36
Структура JSON-RPC v2.0
Запрос
jsonrpc - версия протокола
37
Структура JSON-RPC v2.0
Запрос
jsonrpc - версия протокола
method - имя команды
38
Структура JSON-RPC v2.0
Запрос
jsonrpc - версия протокола
method - имя команды
params - параметры для команды
(список, словарь или вообще это поле может отсутствовать)
39
Структура JSON-RPC v2.0
Запрос
jsonrpc - версия протокола
method - имя команды
params - параметры для команды
(список, словарь или вообще это поле может отсутствовать)
id - номер запроса,
чтобы знать на какой запрос пришёл ответ в случаи асинхронности
40
Структура JSON-RPC v2.0
Запрос
Ответ
result - результат запрос (приметив, список, словарь)
41
Структура JSON-RPC v2.0
Запрос
Ответ
result - результат запрос (приметив, список, словарь)
error - возвращаемое поле в случаи ошибки
42
Структура JSON-RPC v2.0
Запрос
Ответ
Ответ с ошибкой
43
Структура JSON-RPC v2.0
Запрос
Ответ
Ответ с ошибкой
code - номер ошибки (для удобства клиента)
44
Структура JSON-RPC v2.0
Запрос
Ответ
Ответ с ошибкой
code - номер ошибки (для удобства клиента)
message - краткое обозначение ошибки (строка)
45
Структура JSON-RPC v2.0
Запрос
Ответ
Ответ с ошибкой
code - номер ошибки (для удобства клиента)
message - краткое обозначение ошибки (строка)
data - необязательный объект с подробным описанием ошибки
46
Структура JSON-RPC v2.0
Запрос без id
47
Структура JSON-RPC v2.0
Запрос без id
является уведомлением и не требует ответа
48
Структура JSON-RPC v2.0
Пакетный запрос
можно отправлять в одном HTTP-запросе
49
Структура JSON-RPC v2.0
Пакетный запрос
можно отправлять в одном HTTP-запросе
Ответ
50
Структура JSON-RPC v2.0
Запрос
Ответ
Очень простая спецификация —
вторая киллер-фича
51
Интеграция с языками программирования
52
Интеграция с языками программирования
Т.к. это RPC,
то легко переложить его запросы на язык программирования,
будь то Python, JavaScript или другой императивный язык.
53
Интеграция с языками программирования
Т.к. это RPC,
то легко переложить его запросы на язык программирования,
будь то Python, JavaScript или другой императивный язык.
54
Интеграция с языками программирования
Т.к. это RPC,
то легко переложить его запросы на язык программирования,
будь то Python, JavaScript или другой императивный язык.
55
Интеграция с языками программирования
Т.к. это RPC,
то легко переложить его запросы на язык программирования,
будь то Python, JavaScript или другой императивный язык.
Выглядит почти одинаково как для Python, так и для JavaScript :)
56
Интеграция с языками программирования
Пример запроса с использованием AngularJS
и планига к нему github.com/ajsd/angular-jsonrpc
57
Интеграция с языками программирования
Пример запроса с использованием AngularJS
и планига к нему github.com/ajsd/angular-jsonrpc
58
Интеграция с языками программирования
Пример запроса с использованием AngularJS
и планига к нему github.com/ajsd/angular-jsonrpc
59
Интеграция с языками программирования
Обработка запроса на Django
60
Интеграция с языками программирования
Обработка запроса на Django
(используется библиотека github.com/samuraisam/django-json-rpc)
61
Интеграция с языками программирования
Пример отправки запроса из Django
(используется та же библиотека)
62
Интеграция с языками программирования
Пример отправки запроса из Django
(используется та же библиотека)
Лёгкое нативное использование
из кода программы —
третья киллер-фича
63
Отладка JSON-RPC
Если требуется выполнить запрос не из своего кода...
64
Отладка JSON-RPC
Если требуется выполнить запрос не из своего кода...
CURL
65
Отладка JSON-RPC
Если требуется выполнить запрос не из своего кода...
CURL
Графические HTTP-клиенты
66
Отладка JSON-RPC
Если требуется выполнить запрос не из своего кода...
CURL
Графические HTTP-клиенты
Дополнения к браузерам
67
Отладка JSON-RPC
Если требуется выполнить запрос не из своего кода...
CURL
Графические HTTP-клиенты
Дополнения к браузерам
Например, Postman
дополнение для Chrome с подсветкой JSON и историей запросов
https://chrome.google.com/webstore/detail/postman/fhbjgbiflinjbdggehcddcbncdddomop
68
Где стоит использовать JSON-RPC
69
Где стоит использовать JSON-RPC
Почти везде :)
70
Где стоит использовать JSON-RPC
Почти везде :)
где не требуется очень быстрая обработка,
т.к. для этого текстового JSON уже мало
71
Где стоит использовать JSON-RPC
Очень удобно использовать в админках
72
Где стоит использовать JSON-RPC
Очень удобно использовать в админках
Не надо придумывать к кому бы адресу обратится и каким HTTP-методом
Просто пишем функции как в привычном языке программирования
73
Где стоит использовать JSON-RPC
Удобно использовать в мобильных клиентах
74
Где стоит использовать JSON-RPC
Удобно использовать в мобильных клиентах
И не упираться в ограничение на использование только HTTP
Использовать WebSockets и Sockets
75
А где же применять REST
76
А где же применять REST
Там, где вся логика работы укладывается в CRUD и HTTP
77
А где же применять REST
Там, где вся логика работы укладывается в CRUD и HTTP
И есть уверенность, что с развитием проекта так оно и останется
78
А где же применять REST
Там, где вся логика работы укладывается в CRUD и HTTP
И есть уверенность, что с развитием проекта так оно и останется
Чтобы не ограничиваться CRUD и HTTP стоит посмотреть в сторону JSON-RPC
Он такой же простой в написании и чтении, как REST, но не имеет его ограничений.
79
Если нужны гигантские скорости обработки
80
Если нужны гигантские скорости обработки
То нужно смотреть в сторону бинарных протоколов и форматов
81
Если нужны гигантские скорости обработки
То нужно смотреть в сторону бинарных протоколов и форматов
Пример протокола — Thrift
thrift.apache.org
82
Если нужны гигантские скорости обработки
То нужно смотреть в сторону бинарных протоколов и форматов
Пример протокола — Thrift
thrift.apache.org
Пример формата — Protocol Buffers
developers.google.com/protocol-buffers/
83
Если нужны гигантские скорости обработки
То нужно смотреть в сторону бинарных протоколов и форматов
Пример протокола — Thrift
thrift.apache.org
Пример формата — Protocol Buffers
developers.google.com/protocol-buffers/
Их плюс в скорости работы.
Минус — они сложнее в использовании и отладке, чем JSON-RPC.

More Related Content

What's hot

Путь к Go на конкретном примере
Путь к Go на конкретном примереПуть к Go на конкретном примере
Путь к Go на конкретном примереSergey Xek
 
Как собирать gps треки раз в секунду, экономя траффик
Как собирать gps треки раз в секунду, экономя траффикКак собирать gps треки раз в секунду, экономя траффик
Как собирать gps треки раз в секунду, экономя траффикAndrew Minkin
 
«Миллион открытых каналов с данными по сети» – Илья Биин (Zenhotels)
«Миллион открытых каналов с данными по сети» – Илья Биин (Zenhotels)«Миллион открытых каналов с данными по сети» – Илья Биин (Zenhotels)
«Миллион открытых каналов с данными по сети» – Илья Биин (Zenhotels)AvitoTech
 
Aviasales: миграция поискового движка в docker / Дмитрий Кузьменков (Aviasales)
Aviasales: миграция поискового движка в docker / Дмитрий Кузьменков (Aviasales)Aviasales: миграция поискового движка в docker / Дмитрий Кузьменков (Aviasales)
Aviasales: миграция поискового движка в docker / Дмитрий Кузьменков (Aviasales)Ontico
 
Безопасность Node.js / Илья Вербицкий (Независимый консультант)
Безопасность Node.js / Илья Вербицкий (Независимый консультант)Безопасность Node.js / Илья Вербицкий (Независимый консультант)
Безопасность Node.js / Илья Вербицкий (Независимый консультант)Ontico
 
Архитектура поиска в Booking.com / Иван Круглов (Booking.com)
Архитектура поиска в Booking.com / Иван Круглов (Booking.com)Архитектура поиска в Booking.com / Иван Круглов (Booking.com)
Архитектура поиска в Booking.com / Иван Круглов (Booking.com)Ontico
 
2020.10.13 HA Redis is simple. FWDays Highload
2020.10.13 HA Redis is simple. FWDays Highload2020.10.13 HA Redis is simple. FWDays Highload
2020.10.13 HA Redis is simple. FWDays HighloadYehor Herasymchuk
 
«Как 200 строк на Go помогли нам освободить 15 серверов» – Паша Мурзаков (Badoo)
«Как 200 строк на Go помогли нам освободить 15 серверов» – Паша Мурзаков (Badoo)«Как 200 строк на Go помогли нам освободить 15 серверов» – Паша Мурзаков (Badoo)
«Как 200 строк на Go помогли нам освободить 15 серверов» – Паша Мурзаков (Badoo)AvitoTech
 
Архитектура растущего проекта на примере ВКонтакте / Алексей Акулович (ВКонт...
 Архитектура растущего проекта на примере ВКонтакте / Алексей Акулович (ВКонт... Архитектура растущего проекта на примере ВКонтакте / Алексей Акулович (ВКонт...
Архитектура растущего проекта на примере ВКонтакте / Алексей Акулович (ВКонт...Ontico
 
Golang в avito
Golang в avitoGolang в avito
Golang в avitoAvitoTech
 
Тестирование через мониторинг или холакратия на практике / Максим Чистяков (U...
Тестирование через мониторинг или холакратия на практике / Максим Чистяков (U...Тестирование через мониторинг или холакратия на практике / Максим Чистяков (U...
Тестирование через мониторинг или холакратия на практике / Максим Чистяков (U...Ontico
 
JPHP - О проекте на простом языке
JPHP - О проекте на простом языкеJPHP - О проекте на простом языке
JPHP - О проекте на простом языкеDmitry Zaytsev
 
Татьяна Новикова (Казахстан), ЦАРКА. Как мы мониторим Казнет с помощью WebTotem
Татьяна Новикова (Казахстан), ЦАРКА. Как мы мониторим Казнет с помощью WebTotemТатьяна Новикова (Казахстан), ЦАРКА. Как мы мониторим Казнет с помощью WebTotem
Татьяна Новикова (Казахстан), ЦАРКА. Как мы мониторим Казнет с помощью WebTotemKazHackStan
 
Нагруженный поиск на Sphinx
Нагруженный поиск на SphinxНагруженный поиск на Sphinx
Нагруженный поиск на SphinxRoman Pavlushko
 
Кит на службе у человека microPaaS Deis / Алексей Медведчиков (2ГИС)
Кит на службе у человека microPaaS Deis / Алексей Медведчиков (2ГИС)Кит на службе у человека microPaaS Deis / Алексей Медведчиков (2ГИС)
Кит на службе у человека microPaaS Deis / Алексей Медведчиков (2ГИС)Ontico
 
Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)
Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)
Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)Ontico
 
Компиляция скриптов PHP. Алексей Романенко
Компиляция скриптов PHP. Алексей РоманенкоКомпиляция скриптов PHP. Алексей Романенко
Компиляция скриптов PHP. Алексей РоманенкоFuenteovejuna
 
Чеклист по клиентской оптимизации - Лавлинский Николай, РИТ++ 2017
Чеклист по клиентской оптимизации - Лавлинский Николай, РИТ++ 2017Чеклист по клиентской оптимизации - Лавлинский Николай, РИТ++ 2017
Чеклист по клиентской оптимизации - Лавлинский Николай, РИТ++ 2017Николай Лавлинский
 
Мой маленький уютный PaaS / Илья Беда (bro.agency)
Мой маленький уютный PaaS / Илья Беда (bro.agency)Мой маленький уютный PaaS / Илья Беда (bro.agency)
Мой маленький уютный PaaS / Илья Беда (bro.agency)Ontico
 
OpenResty: превращаем NGINX в полноценный сервер приложений / Владимир Прота...
OpenResty: превращаем NGINX в полноценный сервер приложений  / Владимир Прота...OpenResty: превращаем NGINX в полноценный сервер приложений  / Владимир Прота...
OpenResty: превращаем NGINX в полноценный сервер приложений / Владимир Прота...Ontico
 

What's hot (20)

Путь к Go на конкретном примере
Путь к Go на конкретном примереПуть к Go на конкретном примере
Путь к Go на конкретном примере
 
Как собирать gps треки раз в секунду, экономя траффик
Как собирать gps треки раз в секунду, экономя траффикКак собирать gps треки раз в секунду, экономя траффик
Как собирать gps треки раз в секунду, экономя траффик
 
«Миллион открытых каналов с данными по сети» – Илья Биин (Zenhotels)
«Миллион открытых каналов с данными по сети» – Илья Биин (Zenhotels)«Миллион открытых каналов с данными по сети» – Илья Биин (Zenhotels)
«Миллион открытых каналов с данными по сети» – Илья Биин (Zenhotels)
 
Aviasales: миграция поискового движка в docker / Дмитрий Кузьменков (Aviasales)
Aviasales: миграция поискового движка в docker / Дмитрий Кузьменков (Aviasales)Aviasales: миграция поискового движка в docker / Дмитрий Кузьменков (Aviasales)
Aviasales: миграция поискового движка в docker / Дмитрий Кузьменков (Aviasales)
 
Безопасность Node.js / Илья Вербицкий (Независимый консультант)
Безопасность Node.js / Илья Вербицкий (Независимый консультант)Безопасность Node.js / Илья Вербицкий (Независимый консультант)
Безопасность Node.js / Илья Вербицкий (Независимый консультант)
 
Архитектура поиска в Booking.com / Иван Круглов (Booking.com)
Архитектура поиска в Booking.com / Иван Круглов (Booking.com)Архитектура поиска в Booking.com / Иван Круглов (Booking.com)
Архитектура поиска в Booking.com / Иван Круглов (Booking.com)
 
2020.10.13 HA Redis is simple. FWDays Highload
2020.10.13 HA Redis is simple. FWDays Highload2020.10.13 HA Redis is simple. FWDays Highload
2020.10.13 HA Redis is simple. FWDays Highload
 
«Как 200 строк на Go помогли нам освободить 15 серверов» – Паша Мурзаков (Badoo)
«Как 200 строк на Go помогли нам освободить 15 серверов» – Паша Мурзаков (Badoo)«Как 200 строк на Go помогли нам освободить 15 серверов» – Паша Мурзаков (Badoo)
«Как 200 строк на Go помогли нам освободить 15 серверов» – Паша Мурзаков (Badoo)
 
Архитектура растущего проекта на примере ВКонтакте / Алексей Акулович (ВКонт...
 Архитектура растущего проекта на примере ВКонтакте / Алексей Акулович (ВКонт... Архитектура растущего проекта на примере ВКонтакте / Алексей Акулович (ВКонт...
Архитектура растущего проекта на примере ВКонтакте / Алексей Акулович (ВКонт...
 
Golang в avito
Golang в avitoGolang в avito
Golang в avito
 
Тестирование через мониторинг или холакратия на практике / Максим Чистяков (U...
Тестирование через мониторинг или холакратия на практике / Максим Чистяков (U...Тестирование через мониторинг или холакратия на практике / Максим Чистяков (U...
Тестирование через мониторинг или холакратия на практике / Максим Чистяков (U...
 
JPHP - О проекте на простом языке
JPHP - О проекте на простом языкеJPHP - О проекте на простом языке
JPHP - О проекте на простом языке
 
Татьяна Новикова (Казахстан), ЦАРКА. Как мы мониторим Казнет с помощью WebTotem
Татьяна Новикова (Казахстан), ЦАРКА. Как мы мониторим Казнет с помощью WebTotemТатьяна Новикова (Казахстан), ЦАРКА. Как мы мониторим Казнет с помощью WebTotem
Татьяна Новикова (Казахстан), ЦАРКА. Как мы мониторим Казнет с помощью WebTotem
 
Нагруженный поиск на Sphinx
Нагруженный поиск на SphinxНагруженный поиск на Sphinx
Нагруженный поиск на Sphinx
 
Кит на службе у человека microPaaS Deis / Алексей Медведчиков (2ГИС)
Кит на службе у человека microPaaS Deis / Алексей Медведчиков (2ГИС)Кит на службе у человека microPaaS Deis / Алексей Медведчиков (2ГИС)
Кит на службе у человека microPaaS Deis / Алексей Медведчиков (2ГИС)
 
Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)
Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)
Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)
 
Компиляция скриптов PHP. Алексей Романенко
Компиляция скриптов PHP. Алексей РоманенкоКомпиляция скриптов PHP. Алексей Романенко
Компиляция скриптов PHP. Алексей Романенко
 
Чеклист по клиентской оптимизации - Лавлинский Николай, РИТ++ 2017
Чеклист по клиентской оптимизации - Лавлинский Николай, РИТ++ 2017Чеклист по клиентской оптимизации - Лавлинский Николай, РИТ++ 2017
Чеклист по клиентской оптимизации - Лавлинский Николай, РИТ++ 2017
 
Мой маленький уютный PaaS / Илья Беда (bro.agency)
Мой маленький уютный PaaS / Илья Беда (bro.agency)Мой маленький уютный PaaS / Илья Беда (bro.agency)
Мой маленький уютный PaaS / Илья Беда (bro.agency)
 
OpenResty: превращаем NGINX в полноценный сервер приложений / Владимир Прота...
OpenResty: превращаем NGINX в полноценный сервер приложений  / Владимир Прота...OpenResty: превращаем NGINX в полноценный сервер приложений  / Владимир Прота...
OpenResty: превращаем NGINX в полноценный сервер приложений / Владимир Прота...
 

Similar to JSON-RPC или когда rest неудобен

Anton Tsitou "Designing hybrid Go/PHP applications using RoadRunner"
Anton Tsitou "Designing hybrid Go/PHP applications using RoadRunner"Anton Tsitou "Designing hybrid Go/PHP applications using RoadRunner"
Anton Tsitou "Designing hybrid Go/PHP applications using RoadRunner"Fwdays
 
Общие технологии между несколькими проектами в Яндексе
Общие технологии между несколькими проектами в ЯндексеОбщие технологии между несколькими проектами в Яндексе
Общие технологии между несколькими проектами в ЯндексеYandex
 
Программируемость корпоративной сети с Cisco APIC-EM
Программируемость корпоративной сети с Cisco APIC-EMПрограммируемость корпоративной сети с Cisco APIC-EM
Программируемость корпоративной сети с Cisco APIC-EMCisco Russia
 
Делаем вебсервис из WordPress
Делаем вебсервис из WordPressДелаем вебсервис из WordPress
Делаем вебсервис из WordPressThe NGO Development Center
 
Михаил Корепанов "Инкрементальные обновления на клиенте. Ловкость рук и никак...
Михаил Корепанов "Инкрементальные обновления на клиенте. Ловкость рук и никак...Михаил Корепанов "Инкрементальные обновления на клиенте. Ловкость рук и никак...
Михаил Корепанов "Инкрементальные обновления на клиенте. Ловкость рук и никак...Yandex
 
Автоматизация: технологии и средства
Автоматизация: технологии и средстваАвтоматизация: технологии и средства
Автоматизация: технологии и средстваCisco Russia
 
АРМ - платформа разработки проекта "Госархивы СПб"
АРМ - платформа разработки проекта "Госархивы СПб"АРМ - платформа разработки проекта "Госархивы СПб"
АРМ - платформа разработки проекта "Госархивы СПб"devclub
 
Марат Абдуллин "Хроники серверного Жаваскрипта"
Марат Абдуллин "Хроники серверного Жаваскрипта"Марат Абдуллин "Хроники серверного Жаваскрипта"
Марат Абдуллин "Хроники серверного Жаваскрипта"Yandex
 
Павел Федотовский «Документация REST API c использованием Swagger»
Павел Федотовский «Документация REST API c использованием Swagger»Павел Федотовский «Документация REST API c использованием Swagger»
Павел Федотовский «Документация REST API c использованием Swagger»SpbDotNet Community
 
Apache.JMeter для .NET-проектов
Apache.JMeter для .NET-проектовApache.JMeter для .NET-проектов
Apache.JMeter для .NET-проектовSQALab
 
Работаем с API по-взрослому - Максим Кислов (Badoo)
Работаем с API по-взрослому - Максим Кислов (Badoo)Работаем с API по-взрослому - Максим Кислов (Badoo)
Работаем с API по-взрослому - Максим Кислов (Badoo)AvitoTech
 
Anton Tsitou "Cycle ORM and Graphs"
Anton Tsitou "Cycle ORM and Graphs"Anton Tsitou "Cycle ORM and Graphs"
Anton Tsitou "Cycle ORM and Graphs"Fwdays
 
Как мы делаем раскладку Календаря@Mail.Ru
Как мы делаем раскладку Календаря@Mail.RuКак мы делаем раскладку Календаря@Mail.Ru
Как мы делаем раскладку Календаря@Mail.RuVladimir Rudnyh
 
ITmozg, Даниил Павлючков
ITmozg, Даниил ПавлючковITmozg, Даниил Павлючков
ITmozg, Даниил ПавлючковEYevseyeva
 
Теория языков программирования некоторые слайды к лекциям
Теория языков программирования некоторые слайды к лекциямТеория языков программирования некоторые слайды к лекциям
Теория языков программирования некоторые слайды к лекциямSergey Staroletov
 
Нагрузочное тестирование API. Как летать, а не ползать?
Нагрузочное тестирование API. Как летать, а не ползать?Нагрузочное тестирование API. Как летать, а не ползать?
Нагрузочное тестирование API. Как летать, а не ползать?IT61
 
Разработка веб-сервисов осень 2013 лекция 8
Разработка веб-сервисов осень 2013 лекция 8Разработка веб-сервисов осень 2013 лекция 8
Разработка веб-сервисов осень 2013 лекция 8Technopark
 
Компиляция скриптов PHP (Алексей Романенко)
Компиляция скриптов PHP (Алексей Романенко)Компиляция скриптов PHP (Алексей Романенко)
Компиляция скриптов PHP (Алексей Романенко)Ontico
 

Similar to JSON-RPC или когда rest неудобен (20)

Anton Tsitou "Designing hybrid Go/PHP applications using RoadRunner"
Anton Tsitou "Designing hybrid Go/PHP applications using RoadRunner"Anton Tsitou "Designing hybrid Go/PHP applications using RoadRunner"
Anton Tsitou "Designing hybrid Go/PHP applications using RoadRunner"
 
SAP hands on lab_ru
SAP hands on lab_ruSAP hands on lab_ru
SAP hands on lab_ru
 
Общие технологии между несколькими проектами в Яндексе
Общие технологии между несколькими проектами в ЯндексеОбщие технологии между несколькими проектами в Яндексе
Общие технологии между несколькими проектами в Яндексе
 
Программируемость корпоративной сети с Cisco APIC-EM
Программируемость корпоративной сети с Cisco APIC-EMПрограммируемость корпоративной сети с Cisco APIC-EM
Программируемость корпоративной сети с Cisco APIC-EM
 
Делаем вебсервис из WordPress
Делаем вебсервис из WordPressДелаем вебсервис из WordPress
Делаем вебсервис из WordPress
 
Михаил Корепанов "Инкрементальные обновления на клиенте. Ловкость рук и никак...
Михаил Корепанов "Инкрементальные обновления на клиенте. Ловкость рук и никак...Михаил Корепанов "Инкрементальные обновления на клиенте. Ловкость рук и никак...
Михаил Корепанов "Инкрементальные обновления на клиенте. Ловкость рук и никак...
 
Автоматизация: технологии и средства
Автоматизация: технологии и средстваАвтоматизация: технологии и средства
Автоматизация: технологии и средства
 
АРМ - платформа разработки проекта "Госархивы СПб"
АРМ - платформа разработки проекта "Госархивы СПб"АРМ - платформа разработки проекта "Госархивы СПб"
АРМ - платформа разработки проекта "Госархивы СПб"
 
Марат Абдуллин "Хроники серверного Жаваскрипта"
Марат Абдуллин "Хроники серверного Жаваскрипта"Марат Абдуллин "Хроники серверного Жаваскрипта"
Марат Абдуллин "Хроники серверного Жаваскрипта"
 
Павел Федотовский «Документация REST API c использованием Swagger»
Павел Федотовский «Документация REST API c использованием Swagger»Павел Федотовский «Документация REST API c использованием Swagger»
Павел Федотовский «Документация REST API c использованием Swagger»
 
Apache.JMeter для .NET-проектов
Apache.JMeter для .NET-проектовApache.JMeter для .NET-проектов
Apache.JMeter для .NET-проектов
 
Работаем с API по-взрослому - Максим Кислов (Badoo)
Работаем с API по-взрослому - Максим Кислов (Badoo)Работаем с API по-взрослому - Максим Кислов (Badoo)
Работаем с API по-взрослому - Максим Кислов (Badoo)
 
Anton Tsitou "Cycle ORM and Graphs"
Anton Tsitou "Cycle ORM and Graphs"Anton Tsitou "Cycle ORM and Graphs"
Anton Tsitou "Cycle ORM and Graphs"
 
Как мы делаем раскладку Календаря@Mail.Ru
Как мы делаем раскладку Календаря@Mail.RuКак мы делаем раскладку Календаря@Mail.Ru
Как мы делаем раскладку Календаря@Mail.Ru
 
ITmozg, Даниил Павлючков
ITmozg, Даниил ПавлючковITmozg, Даниил Павлючков
ITmozg, Даниил Павлючков
 
Теория языков программирования некоторые слайды к лекциям
Теория языков программирования некоторые слайды к лекциямТеория языков программирования некоторые слайды к лекциям
Теория языков программирования некоторые слайды к лекциям
 
Нагрузочное тестирование API. Как летать, а не ползать?
Нагрузочное тестирование API. Как летать, а не ползать?Нагрузочное тестирование API. Как летать, а не ползать?
Нагрузочное тестирование API. Как летать, а не ползать?
 
JPHP
JPHPJPHP
JPHP
 
Разработка веб-сервисов осень 2013 лекция 8
Разработка веб-сервисов осень 2013 лекция 8Разработка веб-сервисов осень 2013 лекция 8
Разработка веб-сервисов осень 2013 лекция 8
 
Компиляция скриптов PHP (Алексей Романенко)
Компиляция скриптов PHP (Алексей Романенко)Компиляция скриптов PHP (Алексей Романенко)
Компиляция скриптов PHP (Алексей Романенко)
 

More from PyNSK

Нейронные сети и Keras. Часть 1
Нейронные сети и Keras. Часть 1Нейронные сети и Keras. Часть 1
Нейронные сети и Keras. Часть 1PyNSK
 
Нейронные сети и Keras. Часть 2
Нейронные сети и Keras. Часть 2Нейронные сети и Keras. Часть 2
Нейронные сети и Keras. Часть 2PyNSK
 
Asyncio для процессинга распределенной базы данных
Asyncio для процессинга  распределенной базы данныхAsyncio для процессинга  распределенной базы данных
Asyncio для процессинга распределенной базы данныхPyNSK
 
Python для GameDev
Python для GameDevPython для GameDev
Python для GameDevPyNSK
 
Python инструменты для нагрузочного тестирования
Python инструменты для нагрузочного тестированияPython инструменты для нагрузочного тестирования
Python инструменты для нагрузочного тестированияPyNSK
 
Python, Django и корпоративные информационные системы
Python, Django и корпоративные информационные системыPython, Django и корпоративные информационные системы
Python, Django и корпоративные информационные системыPyNSK
 
Настрой контент под пользователя!
Настрой контент под пользователя!Настрой контент под пользователя!
Настрой контент под пользователя!PyNSK
 
Питон в малине
Питон в малинеПитон в малине
Питон в малинеPyNSK
 
Мой Python всегда со мной!
Мой Python всегда со мной!Мой Python всегда со мной!
Мой Python всегда со мной!PyNSK
 
Как и зачем можно создать DSL на Python
Как и зачем можно создать DSL на PythonКак и зачем можно создать DSL на Python
Как и зачем можно создать DSL на PythonPyNSK
 
Чем Python плох для стартапа?
Чем Python плох для стартапа?Чем Python плох для стартапа?
Чем Python плох для стартапа?PyNSK
 
Во внутренности Kivy
Во внутренности KivyВо внутренности Kivy
Во внутренности KivyPyNSK
 
Зоопарк python веб-фреймворков
Зоопарк python веб-фреймворковЗоопарк python веб-фреймворков
Зоопарк python веб-фреймворковPyNSK
 
Как Python Дайджест работает с внешней статикой
Как Python Дайджест работает с внешней статикойКак Python Дайджест работает с внешней статикой
Как Python Дайджест работает с внешней статикойPyNSK
 
Применение behave+webdriver для тестирования Web-проектов
Применение behave+webdriver для тестирования Web-проектовПрименение behave+webdriver для тестирования Web-проектов
Применение behave+webdriver для тестирования Web-проектовPyNSK
 
Ctypes в игровых приложениях на python
Ctypes в игровых приложениях на pythonCtypes в игровых приложениях на python
Ctypes в игровых приложениях на pythonPyNSK
 
Оптимизация производительности Python
Оптимизация производительности PythonОптимизация производительности Python
Оптимизация производительности PythonPyNSK
 
Python инструменты решения типичных задач
Python  инструменты решения типичных задачPython  инструменты решения типичных задач
Python инструменты решения типичных задачPyNSK
 
Мир Python функционалим с помощью библиотек
Мир Python  функционалим с помощью библиотекМир Python  функционалим с помощью библиотек
Мир Python функционалим с помощью библиотекPyNSK
 
TestRail. Некоторые возможности интеграции.
TestRail. Некоторые возможности интеграции.TestRail. Некоторые возможности интеграции.
TestRail. Некоторые возможности интеграции.PyNSK
 

More from PyNSK (20)

Нейронные сети и Keras. Часть 1
Нейронные сети и Keras. Часть 1Нейронные сети и Keras. Часть 1
Нейронные сети и Keras. Часть 1
 
Нейронные сети и Keras. Часть 2
Нейронные сети и Keras. Часть 2Нейронные сети и Keras. Часть 2
Нейронные сети и Keras. Часть 2
 
Asyncio для процессинга распределенной базы данных
Asyncio для процессинга  распределенной базы данныхAsyncio для процессинга  распределенной базы данных
Asyncio для процессинга распределенной базы данных
 
Python для GameDev
Python для GameDevPython для GameDev
Python для GameDev
 
Python инструменты для нагрузочного тестирования
Python инструменты для нагрузочного тестированияPython инструменты для нагрузочного тестирования
Python инструменты для нагрузочного тестирования
 
Python, Django и корпоративные информационные системы
Python, Django и корпоративные информационные системыPython, Django и корпоративные информационные системы
Python, Django и корпоративные информационные системы
 
Настрой контент под пользователя!
Настрой контент под пользователя!Настрой контент под пользователя!
Настрой контент под пользователя!
 
Питон в малине
Питон в малинеПитон в малине
Питон в малине
 
Мой Python всегда со мной!
Мой Python всегда со мной!Мой Python всегда со мной!
Мой Python всегда со мной!
 
Как и зачем можно создать DSL на Python
Как и зачем можно создать DSL на PythonКак и зачем можно создать DSL на Python
Как и зачем можно создать DSL на Python
 
Чем Python плох для стартапа?
Чем Python плох для стартапа?Чем Python плох для стартапа?
Чем Python плох для стартапа?
 
Во внутренности Kivy
Во внутренности KivyВо внутренности Kivy
Во внутренности Kivy
 
Зоопарк python веб-фреймворков
Зоопарк python веб-фреймворковЗоопарк python веб-фреймворков
Зоопарк python веб-фреймворков
 
Как Python Дайджест работает с внешней статикой
Как Python Дайджест работает с внешней статикойКак Python Дайджест работает с внешней статикой
Как Python Дайджест работает с внешней статикой
 
Применение behave+webdriver для тестирования Web-проектов
Применение behave+webdriver для тестирования Web-проектовПрименение behave+webdriver для тестирования Web-проектов
Применение behave+webdriver для тестирования Web-проектов
 
Ctypes в игровых приложениях на python
Ctypes в игровых приложениях на pythonCtypes в игровых приложениях на python
Ctypes в игровых приложениях на python
 
Оптимизация производительности Python
Оптимизация производительности PythonОптимизация производительности Python
Оптимизация производительности Python
 
Python инструменты решения типичных задач
Python  инструменты решения типичных задачPython  инструменты решения типичных задач
Python инструменты решения типичных задач
 
Мир Python функционалим с помощью библиотек
Мир Python  функционалим с помощью библиотекМир Python  функционалим с помощью библиотек
Мир Python функционалим с помощью библиотек
 
TestRail. Некоторые возможности интеграции.
TestRail. Некоторые возможности интеграции.TestRail. Некоторые возможности интеграции.
TestRail. Некоторые возможности интеграции.
 

JSON-RPC или когда rest неудобен

  • 1. 1 JSON-RPC или когда REST неудобен PyNSK #6 13.02.2016Александр Кацко
  • 4. 4 Опыт работ с API Проектирование и реализация API Использование имеющегося API
  • 5. 5 Опыт работ с API Проектирование и реализация API Использование имеющегося API Текстовый велосипед JSON показался излишен, команд в протоколе было минимум, потому API состоял из простых строк.
  • 6. 6 Опыт работ с API Проектирование и реализация API Использование имеющегося API Текстовый велосипед JSON показался излишен, команд в протоколе было минимум, потому API состоял из простых строк. JSON в своём формате, отправляемый на URL. НедоREST, недоRPC.
  • 7. 7 Опыт работ с API Проектирование и реализация API Использование имеющегося API Текстовый велосипед JSON показался излишен, команд в протоколе было минимум, потому API состоял из простых строк. JSON в своём формате, отправляемый на URL. НедоREST, недоRPC. JSON-RPC
  • 8. 8 Опыт работ с API Проектирование и реализация API Использование имеющегося API Текстовый велосипед JSON показался излишен, команд в протоколе было минимум, потому API состоял из простых строк. JSON в своём формате, отправляемый на URL. НедоREST, недоRPC. JSON-RPC REST
  • 9. 9 Опыт работ с API Проектирование и реализация API Использование имеющегося API Текстовый велосипед JSON показался излишен, команд в протоколе было минимум, потому API состоял из простых строк. JSON в своём формате, отправляемый на URL. НедоREST, недоRPC. JSON-RPC REST XML-RPC
  • 10. 10 Опыт работ с API Проектирование и реализация API Использование имеющегося API Текстовый велосипед JSON показался излишен, команд в протоколе было минимум, потому API состоял из простых строк. JSON в своём формате, отправляемый на URL. НедоREST, недоRPC. JSON-RPC REST XML-RPC Бинарные велосипеды
  • 11. 11 Опыт работ с API Сфера применения Браузер — сервер HTTP, WebSockets JSON, JSON-RPC, REST
  • 12. 12 Опыт работ с API Сфера применения Браузер — сервер HTTP, WebSockets JSON, JSON-RPC, REST Сервер — сервер HTTP JSON-RPC, XML-RPC, недоREST
  • 13. 13 Опыт работ с API Сфера применения Браузер — сервер HTTP, WebSockets JSON, JSON-RPC, REST Сервер — сервер HTTP JSON-RPC, XML-RPC, недоREST Телефон — сервер HTTP, Sockets JSON-RPC, текстовый и бинарный велосипед
  • 14. 14 Опыт работ с API Сфера применения Браузер — сервер HTTP, WebSockets JSON, JSON-RPC, REST Сервер — сервер HTTP JSON-RPC, XML-RPC, недоREST Телефон — сервер HTTP, Sockets JSON-RPC, текстовый и бинарный велосипед Десктоп — сервер — десктоп WebSockets JSON, JSON-RPC
  • 16. 16 Про какой API речь? API Набор команд, для использования во внешних программах.
  • 18. 18 REST RPC Два типа API Адреса (ресурсы)
  • 19. 19 REST RPC Два типа API Адреса (ресурсы) Функции
  • 20. 20 REST RPC Два типа API Адреса (ресурсы) Функции XML-RPC SOAP Thrift JSON-RPC
  • 21. 21 REST RPC Два типа API Адреса (ресурсы) Функции XML-RPC SOAP Thrift JSON-RPC Текущая версия 2.0 (Updated) 04.01.2013www.jsonrpc.org/specification
  • 23. 23 JSON-RPC v2.0 Формат данных — JSON Транспорт Это логотип JSON
  • 24. 24 JSON-RPC v2.0 Формат данных — JSON Транспорт www.json.org/json-ru.html Это логотип JSON
  • 25. 25 JSON-RPC v2.0 Формат данных — JSON Транспорт www.json.org/json-ru.html легко читается человеком, легко парсится машиной Это логотип JSON
  • 26. 26 JSON-RPC v2.0 Формат данных — JSON Транспорт www.json.org/json-ru.html легко читается человеком, легко парсится машиной для работы с json есть много библиотек Это логотип JSON
  • 27. 27 JSON-RPC v2.0 Формат данных — JSON Транспорт www.json.org/json-ru.html легко читается человеком, легко парсится машиной для работы с json есть много библиотек а если под какой-то язык её нет, то её легко сделать, т.к. json - это текст Это логотип JSON
  • 28. 28 JSON-RPC v2.0 Формат данных — JSON Транспорт — любой www.json.org/json-ru.html легко читается человеком, легко парсится машиной для работы с json есть много библиотек а если под какой-то язык её нет, то её легко сделать, т.к. json - это текст Это логотип JSON
  • 29. 29 JSON-RPC v2.0 Формат данных — JSON Транспорт — любой www.json.org/json-ru.html легко читается человеком, легко парсится машиной для работы с json есть много библиотек а если под какой-то язык её нет, то её легко сделать, т.к. json - это текст HTTP, Socket, WebSocket, электронная почта, FTP, IP посредством почтовых голубей Это логотип JSON
  • 30. 30 JSON-RPC v2.0 Транспорт — любой HTTP, Socket, WebSocket, электронная почта, FTP, IP посредством почтовых голубей Доставляем JSON-RPC
  • 31. 31 JSON-RPC v2.0 Формат данных — JSON Транспорт — любой www.json.org/json-ru.html легко читается человеком, легко парсится машиной для работы с json есть много библиотек а если под какой-то язык её нет, то её легко сделать, т.к. json - это текст HTTP, Socket, WebSocket, электронная почта, FTP, IP посредством почтовых голубей Это логотип JSON Простой формат и любой транспорт — первая киллер-фича
  • 36. 36 Структура JSON-RPC v2.0 Запрос jsonrpc - версия протокола
  • 37. 37 Структура JSON-RPC v2.0 Запрос jsonrpc - версия протокола method - имя команды
  • 38. 38 Структура JSON-RPC v2.0 Запрос jsonrpc - версия протокола method - имя команды params - параметры для команды (список, словарь или вообще это поле может отсутствовать)
  • 39. 39 Структура JSON-RPC v2.0 Запрос jsonrpc - версия протокола method - имя команды params - параметры для команды (список, словарь или вообще это поле может отсутствовать) id - номер запроса, чтобы знать на какой запрос пришёл ответ в случаи асинхронности
  • 40. 40 Структура JSON-RPC v2.0 Запрос Ответ result - результат запрос (приметив, список, словарь)
  • 41. 41 Структура JSON-RPC v2.0 Запрос Ответ result - результат запрос (приметив, список, словарь) error - возвращаемое поле в случаи ошибки
  • 43. 43 Структура JSON-RPC v2.0 Запрос Ответ Ответ с ошибкой code - номер ошибки (для удобства клиента)
  • 44. 44 Структура JSON-RPC v2.0 Запрос Ответ Ответ с ошибкой code - номер ошибки (для удобства клиента) message - краткое обозначение ошибки (строка)
  • 45. 45 Структура JSON-RPC v2.0 Запрос Ответ Ответ с ошибкой code - номер ошибки (для удобства клиента) message - краткое обозначение ошибки (строка) data - необязательный объект с подробным описанием ошибки
  • 47. 47 Структура JSON-RPC v2.0 Запрос без id является уведомлением и не требует ответа
  • 48. 48 Структура JSON-RPC v2.0 Пакетный запрос можно отправлять в одном HTTP-запросе
  • 49. 49 Структура JSON-RPC v2.0 Пакетный запрос можно отправлять в одном HTTP-запросе Ответ
  • 50. 50 Структура JSON-RPC v2.0 Запрос Ответ Очень простая спецификация — вторая киллер-фича
  • 51. 51 Интеграция с языками программирования
  • 52. 52 Интеграция с языками программирования Т.к. это RPC, то легко переложить его запросы на язык программирования, будь то Python, JavaScript или другой императивный язык.
  • 53. 53 Интеграция с языками программирования Т.к. это RPC, то легко переложить его запросы на язык программирования, будь то Python, JavaScript или другой императивный язык.
  • 54. 54 Интеграция с языками программирования Т.к. это RPC, то легко переложить его запросы на язык программирования, будь то Python, JavaScript или другой императивный язык.
  • 55. 55 Интеграция с языками программирования Т.к. это RPC, то легко переложить его запросы на язык программирования, будь то Python, JavaScript или другой императивный язык. Выглядит почти одинаково как для Python, так и для JavaScript :)
  • 56. 56 Интеграция с языками программирования Пример запроса с использованием AngularJS и планига к нему github.com/ajsd/angular-jsonrpc
  • 57. 57 Интеграция с языками программирования Пример запроса с использованием AngularJS и планига к нему github.com/ajsd/angular-jsonrpc
  • 58. 58 Интеграция с языками программирования Пример запроса с использованием AngularJS и планига к нему github.com/ajsd/angular-jsonrpc
  • 59. 59 Интеграция с языками программирования Обработка запроса на Django
  • 60. 60 Интеграция с языками программирования Обработка запроса на Django (используется библиотека github.com/samuraisam/django-json-rpc)
  • 61. 61 Интеграция с языками программирования Пример отправки запроса из Django (используется та же библиотека)
  • 62. 62 Интеграция с языками программирования Пример отправки запроса из Django (используется та же библиотека) Лёгкое нативное использование из кода программы — третья киллер-фича
  • 63. 63 Отладка JSON-RPC Если требуется выполнить запрос не из своего кода...
  • 64. 64 Отладка JSON-RPC Если требуется выполнить запрос не из своего кода... CURL
  • 65. 65 Отладка JSON-RPC Если требуется выполнить запрос не из своего кода... CURL Графические HTTP-клиенты
  • 66. 66 Отладка JSON-RPC Если требуется выполнить запрос не из своего кода... CURL Графические HTTP-клиенты Дополнения к браузерам
  • 67. 67 Отладка JSON-RPC Если требуется выполнить запрос не из своего кода... CURL Графические HTTP-клиенты Дополнения к браузерам Например, Postman дополнение для Chrome с подсветкой JSON и историей запросов https://chrome.google.com/webstore/detail/postman/fhbjgbiflinjbdggehcddcbncdddomop
  • 69. 69 Где стоит использовать JSON-RPC Почти везде :)
  • 70. 70 Где стоит использовать JSON-RPC Почти везде :) где не требуется очень быстрая обработка, т.к. для этого текстового JSON уже мало
  • 71. 71 Где стоит использовать JSON-RPC Очень удобно использовать в админках
  • 72. 72 Где стоит использовать JSON-RPC Очень удобно использовать в админках Не надо придумывать к кому бы адресу обратится и каким HTTP-методом Просто пишем функции как в привычном языке программирования
  • 73. 73 Где стоит использовать JSON-RPC Удобно использовать в мобильных клиентах
  • 74. 74 Где стоит использовать JSON-RPC Удобно использовать в мобильных клиентах И не упираться в ограничение на использование только HTTP Использовать WebSockets и Sockets
  • 75. 75 А где же применять REST
  • 76. 76 А где же применять REST Там, где вся логика работы укладывается в CRUD и HTTP
  • 77. 77 А где же применять REST Там, где вся логика работы укладывается в CRUD и HTTP И есть уверенность, что с развитием проекта так оно и останется
  • 78. 78 А где же применять REST Там, где вся логика работы укладывается в CRUD и HTTP И есть уверенность, что с развитием проекта так оно и останется Чтобы не ограничиваться CRUD и HTTP стоит посмотреть в сторону JSON-RPC Он такой же простой в написании и чтении, как REST, но не имеет его ограничений.
  • 79. 79 Если нужны гигантские скорости обработки
  • 80. 80 Если нужны гигантские скорости обработки То нужно смотреть в сторону бинарных протоколов и форматов
  • 81. 81 Если нужны гигантские скорости обработки То нужно смотреть в сторону бинарных протоколов и форматов Пример протокола — Thrift thrift.apache.org
  • 82. 82 Если нужны гигантские скорости обработки То нужно смотреть в сторону бинарных протоколов и форматов Пример протокола — Thrift thrift.apache.org Пример формата — Protocol Buffers developers.google.com/protocol-buffers/
  • 83. 83 Если нужны гигантские скорости обработки То нужно смотреть в сторону бинарных протоколов и форматов Пример протокола — Thrift thrift.apache.org Пример формата — Protocol Buffers developers.google.com/protocol-buffers/ Их плюс в скорости работы. Минус — они сложнее в использовании и отладке, чем JSON-RPC.