SlideShare uma empresa Scribd logo
1 de 83
Baixar para ler 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.

Mais conteúdo relacionado

Mais procurados

Flask, гордость и предубеждение
Flask, гордость и предубеждениеFlask, гордость и предубеждение
Flask, гордость и предубеждениеYehor Nazarkin
 
Как мы делаем раскладку Календаря@Mail.Ru
Как мы делаем раскладку Календаря@Mail.RuКак мы делаем раскладку Календаря@Mail.Ru
Как мы делаем раскладку Календаря@Mail.RuVladimir Rudnyh
 
Back to the future: Функциональное программирование вчера и сегодня
Back to the future: Функциональное программирование вчера и сегодняBack to the future: Функциональное программирование вчера и сегодня
Back to the future: Функциональное программирование вчера и сегодняAlexander Granin
 
Оптимизация высоконагруженных ASP.NET приложений, работающих с MS SQL Server ...
Оптимизация высоконагруженных ASP.NET приложений, работающих с MS SQL Server ...Оптимизация высоконагруженных ASP.NET приложений, работающих с MS SQL Server ...
Оптимизация высоконагруженных ASP.NET приложений, работающих с MS SQL Server ...Stas Vyschepan
 
Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)
Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)
Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)Ontico
 
PostgreSQL worst practices / Илья Космодемьянский (Data Egret)
PostgreSQL worst practices / Илья Космодемьянский (Data Egret)PostgreSQL worst practices / Илья Космодемьянский (Data Egret)
PostgreSQL worst practices / Илья Космодемьянский (Data Egret)Ontico
 
Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)
Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)
Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)Ontico
 
C++ Core Guidelines
C++ Core Guidelines C++ Core Guidelines
C++ Core Guidelines Sergey Zubkov
 
Serghei Iakovlev "Chaos engineering in action"
Serghei Iakovlev "Chaos engineering in action"Serghei Iakovlev "Chaos engineering in action"
Serghei Iakovlev "Chaos engineering in action"Fwdays
 
CPAN: модули, авторы и документация
CPAN: модули, авторы и документацияCPAN: модули, авторы и документация
CPAN: модули, авторы и документацияAnatoly Sharifulin
 
Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"
Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"
Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"Yandex
 
Константин Осипов
Константин ОсиповКонстантин Осипов
Константин ОсиповCodeFest
 
Github Flow. Тестировщики против тестирования
Github Flow. Тестировщики против тестированияGithub Flow. Тестировщики против тестирования
Github Flow. Тестировщики против тестированияSQALab
 
BlackBox testing
BlackBox testingBlackBox testing
BlackBox testingbeched
 
Лев Валкин — Кое-что про Erlang
Лев Валкин — Кое-что про ErlangЛев Валкин — Кое-что про Erlang
Лев Валкин — Кое-что про ErlangYury Yurevich
 
Django: инструкция по применению
Django: инструкция по применениюDjango: инструкция по применению
Django: инструкция по применениюIvan Kolodyazhny
 
CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...
CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...
CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...CodeFest
 
High load. Наследство от дядюшки Ау
High load. Наследство от дядюшки АуHigh load. Наследство от дядюшки Ау
High load. Наследство от дядюшки АуIgor Malinovskiy
 
Refactorings with RubyMine
Refactorings with RubyMineRefactorings with RubyMine
Refactorings with RubyMineavokin
 
14 HappyDev-lite-2015 autumn. Дмитрий Вахрушев. Зачем вам изучать Python?
14 HappyDev-lite-2015 autumn. Дмитрий Вахрушев. Зачем вам изучать Python?14 HappyDev-lite-2015 autumn. Дмитрий Вахрушев. Зачем вам изучать Python?
14 HappyDev-lite-2015 autumn. Дмитрий Вахрушев. Зачем вам изучать Python?HappyDev-lite
 

Mais procurados (20)

Flask, гордость и предубеждение
Flask, гордость и предубеждениеFlask, гордость и предубеждение
Flask, гордость и предубеждение
 
Как мы делаем раскладку Календаря@Mail.Ru
Как мы делаем раскладку Календаря@Mail.RuКак мы делаем раскладку Календаря@Mail.Ru
Как мы делаем раскладку Календаря@Mail.Ru
 
Back to the future: Функциональное программирование вчера и сегодня
Back to the future: Функциональное программирование вчера и сегодняBack to the future: Функциональное программирование вчера и сегодня
Back to the future: Функциональное программирование вчера и сегодня
 
Оптимизация высоконагруженных ASP.NET приложений, работающих с MS SQL Server ...
Оптимизация высоконагруженных ASP.NET приложений, работающих с MS SQL Server ...Оптимизация высоконагруженных ASP.NET приложений, работающих с MS SQL Server ...
Оптимизация высоконагруженных ASP.NET приложений, работающих с MS SQL Server ...
 
Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)
Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)
Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)
 
PostgreSQL worst practices / Илья Космодемьянский (Data Egret)
PostgreSQL worst practices / Илья Космодемьянский (Data Egret)PostgreSQL worst practices / Илья Космодемьянский (Data Egret)
PostgreSQL worst practices / Илья Космодемьянский (Data Egret)
 
Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)
Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)
Пайплайн машинного обучения на Apache Spark / Павел Клеменков (Rambler&Co)
 
C++ Core Guidelines
C++ Core Guidelines C++ Core Guidelines
C++ Core Guidelines
 
Serghei Iakovlev "Chaos engineering in action"
Serghei Iakovlev "Chaos engineering in action"Serghei Iakovlev "Chaos engineering in action"
Serghei Iakovlev "Chaos engineering in action"
 
CPAN: модули, авторы и документация
CPAN: модули, авторы и документацияCPAN: модули, авторы и документация
CPAN: модули, авторы и документация
 
Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"
Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"
Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"
 
Константин Осипов
Константин ОсиповКонстантин Осипов
Константин Осипов
 
Github Flow. Тестировщики против тестирования
Github Flow. Тестировщики против тестированияGithub Flow. Тестировщики против тестирования
Github Flow. Тестировщики против тестирования
 
BlackBox testing
BlackBox testingBlackBox testing
BlackBox testing
 
Лев Валкин — Кое-что про Erlang
Лев Валкин — Кое-что про ErlangЛев Валкин — Кое-что про Erlang
Лев Валкин — Кое-что про Erlang
 
Django: инструкция по применению
Django: инструкция по применениюDjango: инструкция по применению
Django: инструкция по применению
 
CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...
CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...
CodeFest 2014. Каплуновский Б. — Использование асинхронного I/O для снижения ...
 
High load. Наследство от дядюшки Ау
High load. Наследство от дядюшки АуHigh load. Наследство от дядюшки Ау
High load. Наследство от дядюшки Ау
 
Refactorings with RubyMine
Refactorings with RubyMineRefactorings with RubyMine
Refactorings with RubyMine
 
14 HappyDev-lite-2015 autumn. Дмитрий Вахрушев. Зачем вам изучать Python?
14 HappyDev-lite-2015 autumn. Дмитрий Вахрушев. Зачем вам изучать Python?14 HappyDev-lite-2015 autumn. Дмитрий Вахрушев. Зачем вам изучать Python?
14 HappyDev-lite-2015 autumn. Дмитрий Вахрушев. Зачем вам изучать Python?
 

Semelhante a JSON-RPC

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
 
My talk on HBase ops engineering at TBD Jun 2016
My talk on HBase ops engineering at TBD Jun 2016My talk on HBase ops engineering at TBD Jun 2016
My talk on HBase ops engineering at TBD Jun 2016Alex Chistyakov
 
Марат Абдуллин "Хроники серверного Жаваскрипта"
Марат Абдуллин "Хроники серверного Жаваскрипта"Марат Абдуллин "Хроники серверного Жаваскрипта"
Марат Абдуллин "Хроники серверного Жаваскрипта"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
 
ITmozg, Даниил Павлючков
ITmozg, Даниил ПавлючковITmozg, Даниил Павлючков
ITmozg, Даниил ПавлючковEYevseyeva
 
Теория языков программирования некоторые слайды к лекциям
Теория языков программирования некоторые слайды к лекциямТеория языков программирования некоторые слайды к лекциям
Теория языков программирования некоторые слайды к лекциямSergey Staroletov
 
Нагрузочное тестирование API. Как летать, а не ползать?
Нагрузочное тестирование API. Как летать, а не ползать?Нагрузочное тестирование API. Как летать, а не ползать?
Нагрузочное тестирование API. Как летать, а не ползать?IT61
 
Golang в avito
Golang в avitoGolang в avito
Golang в avitoAvitoTech
 
Разработка веб-сервисов осень 2013 лекция 8
Разработка веб-сервисов осень 2013 лекция 8Разработка веб-сервисов осень 2013 лекция 8
Разработка веб-сервисов осень 2013 лекция 8Technopark
 

Semelhante a JSON-RPC (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
 
Михаил Корепанов "Инкрементальные обновления на клиенте. Ловкость рук и никак...
Михаил Корепанов "Инкрементальные обновления на клиенте. Ловкость рук и никак...Михаил Корепанов "Инкрементальные обновления на клиенте. Ловкость рук и никак...
Михаил Корепанов "Инкрементальные обновления на клиенте. Ловкость рук и никак...
 
Автоматизация: технологии и средства
Автоматизация: технологии и средстваАвтоматизация: технологии и средства
Автоматизация: технологии и средства
 
АРМ - платформа разработки проекта "Госархивы СПб"
АРМ - платформа разработки проекта "Госархивы СПб"АРМ - платформа разработки проекта "Госархивы СПб"
АРМ - платформа разработки проекта "Госархивы СПб"
 
My talk on HBase ops engineering at TBD Jun 2016
My talk on HBase ops engineering at TBD Jun 2016My talk on HBase ops engineering at TBD Jun 2016
My talk on HBase ops engineering at TBD Jun 2016
 
Марат Абдуллин "Хроники серверного Жаваскрипта"
Марат Абдуллин "Хроники серверного Жаваскрипта"Марат Абдуллин "Хроники серверного Жаваскрипта"
Марат Абдуллин "Хроники серверного Жаваскрипта"
 
Павел Федотовский «Документация 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"
 
ITmozg, Даниил Павлючков
ITmozg, Даниил ПавлючковITmozg, Даниил Павлючков
ITmozg, Даниил Павлючков
 
Теория языков программирования некоторые слайды к лекциям
Теория языков программирования некоторые слайды к лекциямТеория языков программирования некоторые слайды к лекциям
Теория языков программирования некоторые слайды к лекциям
 
Нагрузочное тестирование API. Как летать, а не ползать?
Нагрузочное тестирование API. Как летать, а не ползать?Нагрузочное тестирование API. Как летать, а не ползать?
Нагрузочное тестирование API. Как летать, а не ползать?
 
JPHP
JPHPJPHP
JPHP
 
Golang в avito
Golang в avitoGolang в avito
Golang в avito
 
Разработка веб-сервисов осень 2013 лекция 8
Разработка веб-сервисов осень 2013 лекция 8Разработка веб-сервисов осень 2013 лекция 8
Разработка веб-сервисов осень 2013 лекция 8
 

JSON-RPC

  • 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.