„то такое JSON-RPC?

JavaScript Object Notation Remote Procedure Calls

ћерион Ќетворкс

ѕротоколы API, как и все в этом мире, активно развиваютс€. ћногие компании, включа€ GraphQL, gRPC и Thrift, пользуютс€ классическими API SOAP и REST. ¬ списке этих API есть и JSON-RPC.

JSON-RPC, созданный дл€ быстрой разработки многофункциональных сайтов, быстро стал лучшим другом разработчиков.

ƒавайте разберемс€, что это такое, и в чем оно полезно специалистам по разработке приложений и API. «накомство с JSON-RPC начинаетс€ с азов JSON. “ак что перва€ глава данной статьи посв€щена общей информации о JSON.


JSON – что это такое, и как оно работает

JSON – это легковесный формат обмена сообщени€ми, который подходит дл€ более быстрой передачи данных. »менно поэтому он так активно используетс€ в современной разработке.

JSON (JavaScript Object Notation, или нотаци€ объектов JavaScript) производит многократную разбивку данных до тех пор, пока они не примут удобный дл€ обработки вид. ¬ основе JSON лежит JavaScript, поэтому просматрива€ элементы данных, вы не раз встретите строки, нулевые символы, объекты и бинарные переменные.

JSON разбивает сложные сопоставленные данные на управл€емые структуры, облегча€ обработку данных на многих €зыках программировани€, и считаетс€ независимым от €зыка ресурсом. ≈го придумал ƒуглас  рокфорд в 2000 году с целью упрощени€ взаимодействи€ между веб-приложени€ми и сервером.


„то такое JSON RPC?

JSON-RPC – это не что иное, как преемник JSON, повсеместно признанный протокол дл€ удаленного вызова процедур (RPC - Remote Procedure Calls). –абота€ на уровне разработки, JSON-RPC запускает различную структуру данных, определ€€ задачи дл€ приложений. Ёто сравнительно новый протокол с узкой областью применени€. 

Ќаборы команд, гибкость и сценарии развертывани€ – все работает с ограничени€ми. Ќо, тем не менее, разработчики вид€т в нем идеальный вариант дл€ простой и быстрой разработки. ¬ простых сценари€х данные ограничени€ не €вл€ютс€ помехой и побуждают разработчиков переходить с REST на JSON-RPC. —тоит также добавить, что:

  • JSON-RPC определ€ет сетевые ограничени€, св€занные с обработкой данных.
  • Ћегка€ конструкци€ и быстра€ обработка – все это подходит дл€ инициации передачи данных с узлами Ethereum.
  • Ѕудучи транспортно-независимым протоколом, JSON-RPC может использовать дл€ взаимодействи€ сокеты и HTTP.
  • Ёто отличное решение дл€ разработки решений на базе Ethereum с использованием блокчейн.

¬ насто€щий момент предлагаетс€ 2 стандарта JSON-RPC: JSON-RPC 1.0 и JSON-RPC 2.0:

  • JSON-RPC 1.0 не хватает возможностей сразу по нескольким пунктам. ќтсутствие названий параметров и по€снений к ошибкам вызывает куда больше проблем, чем кажетс€. —корее уж, это метод дл€ одноранговой передачи данных.
  • ќбновленный JSON RPC 2.0 значительно доработали, заполнив р€д пробелов предыдущей версии. ¬ерсию 1.0. заменили клиент-серверной 2.0.  роме того, в 2.0. по€вились транспортные зависимости.

–азумеетс€, со временем добавили именованные параметры. ѕол€ урезали. Ќет ID дл€ уведомлений; в качестве ответа отправл€етс€ только результат/ошибка. ¬ обновленной версии есть дополнительные расширени€ с информацией об ошибках. 

JSON-RPC

 ак пользоватьс€ JSON RPC?

√лавна€ функци€ протокола заключаетс€ в отправке клиентских запросов на сервер (при поддержке JSON-RPC). «десь под клиентом мы подразумеваем общеприн€тые приложени€, которые развертываютс€ дл€ получени€ запроса от удаленной системы на консолидированный метод.

¬веденные параметры передаютс€ удаленной системе в формате массива или объекта. ¬ зависимости от используемой версии JSON-RPC, удаленна€ система будет отправл€ть в источник запроса разные итоговые значени€.

¬се веб-передачи через JSON-RPC унифицированы и сериализированы с помощью JSON. «апрос JSON-RPC – это вызов удаленного метода. ќн состоит из 3 элементов:

  1. ћетод. ”казывает на строку, котора€ будет запрашиватьс€ при вызове метода. —уществует набор зарезервированных имен с префиксом ‘rpc’ – они предназначаютс€ дл€ внутренних вызовов RPC.
  2. ѕараметры. ¬торой элемент JSON-RPC (объект или массив) со значением параметра, который будет переноситьс€. ѕараметры не вызываютс€ в каждом вызове. 
  3. ID. ÷елое или строковое число, которое регул€рно используетс€ дл€ поддержани€ баланса между запросами и ответами. ≈сли на запрос нет ответа, то ID автоматически удал€етс€.

¬ запросе JSON-RPC получатель об€зан вернутьс€ к проверенному ответу на каждый полученный запрос. ƒобавл€ютс€ 3 компонента:

  1. –езультат – перва€ и важнейша€ часть запроса, передающа€ данные, которые возвращает вызываемый метод. ≈го часто называют JSON-stat, и при ошибке он остаетс€ пустым.
  2. ќшибка – второй компонент. ѕо€вл€етс€, если в процессе вызова что-то идет не так. ¬ ошибке отображаютс€ код и сообщение.
  3. ID ответа указывает на запрос, по которому приходит ответ. ≈сли ответов не требуетс€, то JSON-RPC использует уведомление, в котором написано, что запрос был без ID. ¬ версии 1.0 ID уведомление приходит пустым, а в версии 2.0. оно полностью отсутствует.

ѕлюсы от использовани€ JSON-RPC

JSON-RPC – это довольно «умный» протокол, который предлагает своим клиентам множество плюсов:

ѕроста€ обработка

JSON-RPC намного проще, чем REST. ≈го легко понимают люди и машины. «десь нет сложных команд и наборов данных, так что JSON-RPC идеально подходит дл€ начинающих разработчиков. Ётот протокол Unicode предлагает компактную командную строку.  роме того, он способен обрабатывать данные с именованными фразами или отдельными ключевыми словами. “аким образом, JSON-RPC считаетс€ простым и пон€тным инструментом дл€ работы.

Ѕыстрое врем€ разработки

— JSON-RPC не надо ничего придумывать. ¬се источники доступны и пон€тны. “ака€ простота сокращает врем€ разработки и сроки выхода на рынок. Ёто самое подход€щее решение дл€ разработки приложений в сжатые сроки.

 ачественный обмен информацией

JSON-RPC гарантирует своевременный, быстрый и точный обмен данными, поскольку может обрабатывать уведомлени€ и несколько вызовов. „тобы продолжить свою работу, ему не нужно ждать ответа от сервера или клиента. ≈сли сделан запрос сообщени€, то JSON-RPC гарантированно доставит его «адресату». Ќе важно, насколько сложные компоненты приложени€ вход€т в цепочку коммуникации, JSON-RPC обеспечит должный обмен информацией.

”лучшенна€ производительность API

— помощью JSON-RPC можно создавать API, которые не завис€т от развертываемого протокола. “ака€ возможность крайне важна дл€ улучшени€ производительности API, т.к. замен€ет HTTP и TCP, а также снижает рабочую нагрузку.

ќписание результатов

JSON-RPC выдает пон€тные результаты запроса, которые легко прочитать и обработать. —оздание пакетных запросов, объ€снение body в HTTP и передача параметров – все это гораздо проще реализовать через JSON-RPC.

”лучшенна€ передача

JSON-RPC – это очень удобный дл€ передачи инструмент, ведь поддерживает такие платформы, как XMPP, WebSockets, SFTP, SSH и SCP. ƒанное разграничение позвол€ет разрабатывать быстрые, простые в отладке и удобные дл€ пользовател€ API.  роме того, этот протокол полностью отдел€ет запрошенный контент от используемого процесса передачи. ј любые ошибки в запросах, данные и предупреждени€ передаютс€ через полезную информацию запроса.


REST и JSON-RPC: что выбрать дл€ разработки API? 

Ѕогатый выбор API-ресурсов – это всегда хорошо, но остановитьс€ на каком-то одном варианте бывает не так просто. Ќиже мы постараемс€ помочь разработчикам и объ€сним ключевые особенности попул€рных протоколов. 

JSON-RPC подходит дл€ начинающих разработчиков с ограниченным количеством ресурсов. JSON-RPC – это очень ограниченный в ресурсах протокол, который отлично выполн€ет свою функцию.  роме того, если цель разработчика хоть как-то св€зана с технологией распределенных реестров, то единственным жизнеспособным решением станет именно JSON-RPC. — таким развертыванием не сможет справитьс€ ни один другой протокол.

ƒл€ разработки приложений, использующих технологии распределенных реестров, требуетс€ независимый от протокола API, и JSON-RPC отлично подходит. ќн позвол€ет разработчикам создавать API, которые могут взаимодействовать друг с другом с помощью любого протокола.

≈сть еще одна область, в которой JSON-RPC превосходит REST. ¬ REST доступен ограниченный набор глаголов, что приводит к ошибкам при выполнении операции. ѕри использовании REST необходимо подробно описать HTTP-метод, и на это тратитс€ много времени.  роме того, в REST доступны только CRUD-операции. “ак что лучше отдавать предпочтение JSON-RPC.

“ем не менее JSON-RPC нельз€ назвать универсальным решением дл€ всего. ≈го проблема заключаетс€ во взаимозависимости.  лиенты должны быть тесно св€заны с реализацией служб, поэтому вносить изменени€ в эту реализацию довольно сложно. ѕри попытке изменить что-то, клиенты чаще всего ломаютс€.

REST решает такие задачи намного лучше. Ќапример, API на базе REST мало того, что легко создаютс€, так еще и не отслеживают состо€ни€. Ётот протокол совместим с HTTP и предлагает огромное множество HTTP-библиотек. REST позвол€ет создавать гибкие API. Ёто идеальное решение дл€ CRUD-операций.

ќба протокола имеют свои плюсы и минусы. –азработчикам необходимо прин€ть взвешенное решение, исход€ из главной цели разработки. Ќапример, если разработчику нужны высокопроизводительные вычислени€, то стоит остановитьс€ на JSON-RPC.

≈сли требуетс€ независима€ разработка приложени€ с удобным интерфейсом, то смело выбирайте REST. Ќе стоит также забывать о безопасности API.


JSON-RPC, graphql, grpc

ƒва самых известных аналога JSON-RPC – это GraphQL и gRPC. GraphQL – это полностью адаптивна€ система. ќна используетс€ дл€ точной локализации данных запроса и получени€ только необходимых запрашиваемых данных. ќсновна€ черта – ориентаци€ на клиента. —ервер практически никак не участвует в веб-передаче.  лиент сам устанавливает правила дл€ обработки запрошенных данных.

GraphQL относитс€ к €зыкам запросов, а JSON-RPC относитс€ к удаленному вызову процедур.

≈ще есть gRPC – легковесный протокол с акцентом на производительность. Ёто обновленна€ верси€ RPC. ¬ JSON-RPC серверы и клиенты договариваютс€ о запрашиваемых данных, а архитектура не важна. ј в gRPC, наоборот, запросы обрабатываютс€ по готовой схеме. Ётот протокол может выполн€тьс€ в любой экосистеме.

JSON-RPC интегрируетс€ с MQTT, Python и Kallithea. ƒл€ gRPC доступны такие ресурсы, как .NET, JavaScript, C++, Swift и многие другие.

√лавные отличи€ между всеми решени€ми заключаютс€ в открытости кода и удобстве дл€ клиентов.


—кидки 50% в Merion Academy

¬ыбрать курс