В чем разница между RPC и REST?

RPC и REST – два архитектурных стиля проектирования API. API – это механизмы, которые позволяют двум программным компонентам взаимодействовать друг с другом, используя набор определений и протоколов. Разработчики программного обеспечения используют ранее разработанные или сторонние компоненты для выполнения функций, поэтому им не нужно писать все с нуля. RPC API позволяют разработчикам вызывать удаленные функции на внешних серверах, как если бы они были локальными для своего программного обеспечения. Например, вы можете добавить функцию чата в свое приложение, удаленно вызывая функции обмена сообщениями в другом приложении чата. Напротив, REST API позволяют выполнять определенные операции с данными на удаленном сервере. Например, приложение может добавлять или изменять данные сотрудников на удаленном сервере с помощью REST API.
В чем сходство систем RPC и REST?
Удаленный вызов процедур (RPC) и REST – это способы разработки API. API являются неотъемлемой частью современного веб-проектирования и других распределенных систем. С их помощью два отдельных распределенных приложения или сервиса могут взаимодействовать, не обладая информацией о внутреннем устройстве друг друга. Эти два приложения или сервиса могут не иметь практически ничего общего, за исключением обмена небольшим объемом данных.
API также являются стандартным механизмом взаимодействия внутренней части программы (логического компонента) с ее внешней частью (компонентом интерфейса). При разработке веб-страниц и веб-приложений с использованием API вместо сильной взаимозависимости обеспечивается возможность их масштабирования и изменения с меньшим переписыванием кода.
Далее мы обсудим другие сходства между RPC API и REST API.
Абстрагирование
Несмотря на то, что сетевые взаимодействия являются основной целью API, сам процесс взаимодействия на нижнем уровне упрощен для разработчиков API. Таким образом, они могут сосредоточиться на функциях, а не на технической реализации.
Связь
И REST, и RPC используют HTTP в качестве базового протокола. Самые популярные форматы сообщений в системах RPC и REST – JSON и XML. Предпочтение отдается JSON из-за его читабельности и гибкости.
Совместимость с другими языками
Разработчики могут внедрить RESTful API или RPC API на любом языке по своему выбору. Если элемент сетевого взаимодействия API соответствует стандарту интерфейса RESTful или RPC, то остальной код можно писать на любом языке программирования.
Принципы архитектуры RPC и REST
Во время удаленного вызова процедур (RPC) клиент выполняет удаленный вызов функции (также известной как метод или процедура) на сервере. Как правило, во время вызова на сервер передается одно или несколько значений данных.
В отличие от этого, клиент системы REST запрашивает у сервера выполнение действия над определенным ресурсом сервера. Такие действия ограничиваются операциями создания, чтения, обновления и удаления (CRUD), которые передаются в виде команд или методов HTTP.
RPC фокусируется на функциях или действиях, а REST – на ресурсах или объектах.
Принципы RPC
Далее мы обсудим некоторые принципы, которым обычно следуют системы RPC. Однако они не стандартизированы, как в системе REST.
Удаленный вызов
Вызов функции в RPC осуществляется клиентом на удаленном сервере так, как если бы она была вызвана локально.
Передача параметров
Клиент обычно передает параметры в серверную функцию, аналогично локальной функции.
Заглушки
Функции-заглушки существуют как на стороне клиента, так и на стороне сервера. На стороне клиента они вызывают функцию, а на стороне сервера – фактическую функцию.
Принципы REST
Принципы REST стандартизированы. REST API должны соответствовать этим принципам, чтобы их можно было классифицировать как RESTful.
Клиент-сервер
Архитектура REST типа «клиент-сервер» разделяет клиентов и серверы, и они рассматриваются как самостоятельные системы.
Фиксация состояния
Сервер не хранит никаких записей о состоянии клиента между клиентскими запросами.
Кэшируемость
Клиентские или посреднические системы могут кэшировать ответы сервера в зависимости от того, указал ли клиент такую возможность.
Многоуровневая система
Между клиентом и сервером могут существовать посредники. И клиент, и сервер ничего о них не знают и работают так, как если бы они были соединены напрямую.
Единый интерфейс
Клиент и сервер взаимодействуют с помощью стандартизированного набора инструкций и форматов обмена сообщениями в REST API. Ресурсы идентифицируются по их URL-адресам, которые называются адресами REST API.
Как функционируют RPC и REST
При удаленном вызове процедур (RPC) клиент использует команду POST по протоколу HTTP для вызова определенной функции по ее имени. Для работы RPC разработчикам на стороне клиента необходимо заранее знать имя и параметры функции.
В REST для выполнения процедур клиенты и серверы используют такие HTTP-команды, как GET, POST, PATCH, PUT, DELETE и OPTIONS. Разработчикам нужно знать только URL-адреса ресурсов сервера и не беспокоиться об именах отдельных функций.
В таблице показан тип кода, который использует клиент для выполнения аналогичных действий в RPC и REST.
Работа
RPC
REST
Комментарий
Добавление нового продукта в список товаров
POST /addProduct HTTP/1.1
Тип контента: application/json
POST /products HTTP/1.1
Тип контента: application/json
Команда POST используется в RPC для функции, а POST в REST – для URL-адреса.
Получение сведений о продукте
POST /getProduct HTTP/1.1
Тип контента: application/json
GET /products/123 HTTP/1.1
Команда POST используется в RPC для функции и передает параметр в виде объекта формата JSON. Команда GET используется в REST для URL-адреса и передает параметр в виде такого адреса.
Обновление цены на продукт
POST /updateProductPrice HTTP/1.1
Тип контента: application/json
PUT /products/123 HTTP/1.1
Тип контента: application/json
Команда POST используется в RPC для функции и передает параметр в виде объекта формата JSON. Команда PUT используется в REST для URL-адреса и передает параметр в виде такого адреса и в виде объекта формата JSON.
POST /deleteProduct HTTP/1.1
Тип контента: application/json
DELETE /products/123 HTTP/1.1
Команда POST используется в RPC для функции и передает параметр в виде объекта формата JSON. Команда DELETE используется в REST для URL-адреса и передает параметр в виде такого адреса.
Ключевые отличия от REST
Удаленный вызов процедур (RPC) и REST – это способы проектирования соответствующих интерфейсов клиентских и серверных систем для взаимодействия через Интернет. Однако их структура, реализация и основополагающие принципы различаются. Системы, разработанные с использованием REST, называются RESTful API, а системы, разработанные с использованием RPC, – это просто RPC API.
Далее приведены некоторые другие различия.
Время разработки
Технология RPC была разработана в конце 1970-х – начале 1980-х годов, в то время как термин REST впервые ввел в обиход компьютерный ученый Рой Филдинг в 2000 году.
Операционный формат
REST API имеет стандартизированный набор серверных операций благодаря методам HTTP, а RPC API нет. В некоторых реализациях RPC обеспечивается платформа для стандартизированных операций.
Формат передачи данных
REST может передавать любой формат данных и несколько форматов, например JSON и XML, в одном API.
Однако в RPC API формат данных выбирается сервером и устанавливается в процессе реализации. Вы можете использовать конкретные реализации JSON RPC или XML RPC, в то время как клиенту не предоставляется такая возможность.
Штат
В контексте API термин без фиксации состояний означает принцип проектирования, согласно которому на сервере не хранится никакая информация о предыдущих взаимодействиях клиента. Каждый запрос API обрабатывается независимо, и сервер не полагается на сохраненное состояние клиента для обработки запроса.
Системы REST всегда должны работать без фиксации состояния, а системы RPC могут как сохранять, так и не сохранять его, в зависимости от особенностей архитектуры.
Когда использовать RPC, а когда – REST
Удаленный вызов процедур (RPC) обычно используется для вызова удаленных функций на сервере, требующих результата действия. Этот сервис можно использовать, когда требуются сложные вычисления или вы хотите запустить удаленную процедуру на сервере, скрыв процесс от клиента.
Ниже перечислены действия, для которых RPC подходит наилучшим образом.
- Съемка с помощью камеры удаленного устройства.
- Использование на сервере алгоритма машинного обучения для выявления мошенничества.
- Перевод денег с одного счета на другой в системе дистанционного банковского обслуживания.
- Удаленный перезапуск сервера.
REST API обычно используется для выполнения операций создания, чтения, обновления и удаления (CRUD) объекта данных на сервере. Таким образом, REST API хорошо подходят для случаев, когда требуется единообразное представление серверных данных и структур данных.
Ниже перечислены действия, для которых REST API подходит наилучшим образом.
- Добавление продукта в базу данных.
- Извлечение данных из списка воспроизведения музыки
- Обновление адреса человека.
- Удаление записи в блоге.
Почему REST заменяет RPC?
Хотя REST веб-API сегодня считаются нормой, вызов удаленных процедур (RPC) никуда не исчез. REST API чаще всего используется в приложениях, поскольку разработчикам проще понять и внедрить его. Однако RPC все еще существует и используется, когда больше подходит для конкретного случая.
В настоящее время более популярны современные реализации RPC, такие как gRPC. В некоторых примерах использования архитектура gRPC работает лучше, чем RPC и REST. Она позволяет осуществлять потоковое взаимодействие между клиентом и сервером, а не обмен данными по схеме «запрос-ответ».
Краткое описание различий RPC и REST
RPC
REST
Система, позволяющая удаленному клиенту вызвать процедуру на сервере так, как если бы она была локальной.
Набор правил, определяющих структурированный обмен данными между клиентом и сервером.
Выполнения действий на удаленном сервере.
Операций создания, чтения, обновления и удаления (CRUD) на удаленных объектах.
Лучше всего применять
Когда требуются сложные вычисления или запуск удаленного процесса на сервере.
Когда требуется единообразное представление серверных данных и структур данных.
С фиксацией состояния или без нее.
Без фиксации состояния.
Формат передачи данных
В последовательной структуре, определяемой сервером и обязательной для клиента.
В структуре, определяемой сервером самостоятельно. В пределах одного API можно передавать различные форматы.
Как AWS обеспечивает соответствие вашим требованиям к API?
Amazon Web Services (AWS) предлагает ряд сервисов и инструментов, с помощью которых разработчики API могут создавать, запускать современные приложения и сервисы на основе API и управлять ими. Дополнительные сведения см. в статье о создании современных приложений на AWS.
Инструменты AWS, которые могут удовлетворить ваши требования к API:
- Amazon API Gateway предоставляет разработчикам возможность создавать, публиковать API и управлять ими в любом масштабе. С помощью API Gateway можно создавать REST API, оптимизированные для контейнерных микросервисных архитектур и веб-приложений.
- Elastic Load Balancing (ELB) распределяет сетевой трафик для улучшения масштабируемости приложений. Этот инструмент может маршрутизировать и балансировать трафик gRPC между микросервисами или клиентами и службами с поддержкой gRPC, что позволяет легко внедрять управление трафиком gRPC в архитектуры без изменения базовой инфраструктуры клиентов или их сервисов.
- Amazon Virtual Private Cloud (Amazon VPC) Lattice – это сетевой сервис приложений, который обеспечивает постоянное подключение, мониторинг и защиту связи между сервисами. Он автоматически масштабирует вычислительные и сетевые ресурсы для поддержки рабочих нагрузок HTTP, HTTPS и gRPC с высокой пропускной способностью.
Создайте аккаунт прямо сейчас и начните работу с REST API и RPC на AWS.
Настройка сети Polygon
4. Теперь вы должны увидеть список сетей. Нажмите на Добавить сеть ниже, чтобы добавить настраиваемую сеть.

5. Далее заполните поля необходимой информацией о сети Polygon.

И вы только что настроили сеть Polygon (MATIC) в вашем кошельке MetaMask!
Выбор Request-Response парадигмы API: REST, RPC или GraphQL?
Выбор подходящего формата API позволит в будущем вносить изменения, экономя время, силы и деньги. В этой статье — обзор популярных форматов.
API определяет интерфейс, предоставляющий данные сервиса другим приложениям. Выбор правильного формата API крайне важен. Бизнес не всегда учитывает все факторы, выбирая формат. В результате не хватает возможности для добавления новых фич, которые могут понадобиться в дальнейшем.
Чтобы сэкономить время, силы, а самое главное деньги, стоит посмотреть на best practices, которые применяются на текущий момент. Это поможет разработать API, который позволит вносить необходимые изменения в будущем. За прошедшие годы появилось несколько форматов API, рассмотрим самые популярные из них.
Request-Response APIs
Первую группу API, которую мы рассмотрим, можно выделить как Request-Response API. Основные отличия данной группы:
- Интерфейс предоставляется через веб-сервер на основе HTTP протокола.
- API определяет набор эндпоинтов.
- Клиенты отправляют запросы для работы с данными(получить/удалить/изменить) на данные эндпоинты.
- Ответ в формате JSON или XML.
Самые популярные request-response API: REST, RPC и GraphQL.
REST
Самый популярный подход на данный момент. Используется такими поставщиками API, как, например, Google, Twitter и GitHub.
Когда мы говорим про REST, мы говорим про ресурсы. Ресурс — это объект, который может быть идентифицирован, назван, адресован или обработан в сети. REST представляет данные как ресурсы и использует стандартные HTTP-методы для представления транзакций создания, чтения, обновления и удаления этих ресурсов, то есть стандартные CRUD операции. По сути, все бизнес-сущности, которыми оперирует сервис, могут быть определены как ресурсы.
Общие правила, которым следует RESTful API:
- Ресурс является частью URL.
- Существительные вместо глаголов, вместо /getUserInfo/123 используем /users/123 .
- Для каждого ресурса создается два URL, один для коллекции, один для экземпляра коллекции, /users и users/123 .
- HTTP-методы GET, POST, UPDATE и DELETE информируют сервер о том, какое действие нужно совершить над данным ресурсом. Различные методы, примененные к одному и тому же ресурсу, выполняют различную функциональность.
- Стандартные коды состояния ответа HTTP возвращаются сервером, указывая на успех или неудачу. Как правило, коды в диапазоне 2XX указывают на успех, коды 3XX указывают на перемещение ресурса, а коды в диапазоне 4XX указывают на ошибку на стороне клиента (например, отсутствие обязательного параметра или слишком много запросов). Коды в диапазоне 5XX указывают на ошибки на стороне сервера.
- Ресурс, который существует только в другом ресурсе, должен быть представлен как подресурс, а не как ресурс верхнего уровня в URL-адресе. Например issues не могут существовать отдельно от репозитория, поэтому URL создания нового issue в GitHub API выглядит таким образом — /repos/:owner/:repo/issues
Помимо типичных операций CRUD, API-интерфейсы REST могут иногда нуждаться в представлении операций, не относящихся к CRUD. В этом случае обычно используются следующие подходы:
- Передавать действие в теле метода. Например, GitHub использует данный подход для архивации репозитория (прим. PATCH /repos/:owner/:repo).
- Трактовать действие как подресурс. API GitHub использует этот шаблон для блокировки и разблокировки issue (прим. PUT /repos/:owner/:repo/issues/:number/lock).
- Использовать отдельный ресурс. Некоторые операции, такие как поиск, ещё сложнее вписать в парадигму REST. Типичная практика в этом случае — использовать только команду действия в URL-адресе API (прим. GET /search/code?q=:query).
- Стандартное имя метода, формат аргументов и коды состояния.
- Использует функционал HTTP.
- Легко поддерживать.
- Большой payload.
- Множественные HTTP-запросы.
Когда использовать:
Для API, предоставляющего CRUD-операции.
Remote Procedure Call (RPC)
Удаленный вызов процедур (RPC) — это одна из простейших парадигм API, в которой клиент вызывает исполнение блока кода на сервере. В то время как REST рассматривает всё как ресурсы, RPC рассматривает действия. Клиенты обычно передают имя метода и аргументы серверу и получают обратно JSON или XML.
Правила RPC:
- Эндпоинты содержат имя выполняемой операции.
- Вызовы API выполняются с помощью наиболее подходящего HTTP-глагола: GET для запросов только для чтения и POST для других.
POST /api/conversations.archive HOST slack.com Content-Type: application/x-www-form-urlencoded Authorization: token OAUTH-TOKEN channel=C01234
- Очень прост.
- Легковесный payload.
- Высокая производительность.
- Труден в обнаружении.
- Практически нет стандартизации.
- Может быть создано слишком много эндпоинтов.
Когда использовать:
Для API, предоставляющего действия, которые сложно инкапсулировать в CRUD операциях.
GraphQL
GraphQL — это язык запросов для API, который в последнее время приобрел значительную популярность. Он был разработан внутри Facebook в 2012 году до публичного выпуска в 2015 году. GraphQL позволяет клиентам определять структуру требуемых данных. Сервер возвращает именно эту структуру
POST /graphql HOST api.github.com Content-Type: application/json Authorization: bearer OAUTH-TOKEN < user(login: "kliukovkin") < id name company createdAt >>
В отличие от REST и RPC API, GraphQL требует только один эндпоинт URL. Также вам не нужны разные HTTP-методы для описания операции. Вместо этого вы указываете в теле JSON выполняете ли вы запрос или мутацию. GraphQL поддерживает методы GET и POST.
- Один запрос.
- Возможность добавлять новые поля и типы в GraphQL API, не затрагивая существующие запросы.
- Проще отказаться от использования существующих полей.
- Выполняя анализ логов, поставщик API может выяснить, какие клиенты используют определённое поле. Вы можете скрыть устаревшие поля и удалить их, когда их не используют клиенты. С REST и RPC API сложнее определить, какие клиенты используют устаревшее поле, что затрудняет удаление.
- Small payload.
- GraphQL строго типизирован. Во время разработки проверка типов GraphQL помогает гарантировать, что запрос синтаксически верен и действителен.
- GraphiQL — встроенная в браузер IDE для изучения GraphQL. Данный инструмент позволяет пользователям писать, проверять и тестировать запросы GraphQL в браузере.
- Серверу требуется дополнительная обработка для анализа сложных запросов и проверки параметров.
- Оптимизация производительности запросов GraphQL тоже может быть сложной задачей.
- Внутри компании легко предсказать варианты использования и отладить узкие места в производительности, но при работе с внешними разработчиками эти варианты использования становятся трудными для понимания и оптимизации.
На данный момент этот блок не поддерживается, но мы не забыли о нём! Наша команда уже занята его разработкой, он будет доступен в ближайшее время.
На данный момент этот блок не поддерживается, но мы не забыли о нём! Наша команда уже занята его разработкой, он будет доступен в ближайшее время.
На данный момент этот блок не поддерживается, но мы не забыли о нём! Наша команда уже занята его разработкой, он будет доступен в ближайшее время.

Следите за новыми постами по любимым темам
Подпишитесь на интересующие вас теги, чтобы следить за новыми постами и быть в курсе событий.
Как настроить MetaMask на сеть Binance Smart Chain
Чтобы работать в сети Binance Smart Chain понадобится кошелёк MetaMask. Его можно установить в браузер GoogleCrome или на ваш смартфон.
После установки следуйте инструкции, чтобы подключить ваш кошелёк MetaMask к сети BSC
Шаг 1:
Нажмите на «выбор сети». Далее, как показано на скриншоте, выберите «Сustom RPC».

Шаг 2:
Появится форма, в которой вам необходимо заполнить определенные параметры для подключения к сети Binance Smart Chain.

В данной форме необходимо указать следующее:
Network name: Binance Smart Chain
New RPC URL: https://bsc-dataseed1.binance.org:443
ChainID: 56
Symbol: BNB
Block Explorer: https://explorer.binance.org/smart
Шаг 3:
После добавления сети BSC в кошелёк MetaMask необходимо переключить сеть с Ethereum на BinanceSmartChain.

В отличие от сети Ethereum, где комиссия за операции взимается в ETH, в Binance Smart Chain используется токен BNB. Как только вы переключитесь с сети Ethereum на BSC, у вас будет отображаться BNB основным токеном, вместо ETH.
Примечания
MetaMask работает с сетью BSC точно так же, как и с сетью ETH. Комиссия в сети BSC берётся в BNB (BNB заменяет ETH. ETH, в свою очередь, не используется в сети, а если используется в редких случаях).
В некоторых случаях MetaMask может отображать токен BNB как ETH в кошельке (но в голове надо держать, что это BNB.
Адрес вашего кошелька в сети Ethereum и в сети BSC одинаковый. Если ранее использовали сеть Ethereum и там у вас есть какие-то активы активы, переключив на сеть BSC вы этих активов не увидите (потому что ваши активы находятся на разных блокчейнах). После того, как переключите сеть обратно на Ethereum активы отобразятся.