Обещанием REST всегда был унифицированный интерфейс. . Идеальный клиент REST мог бы взаимодействовать с широким спектром ресурсов RESTful, даже с теми, которых не существовало, когда клиент был закодирован.
К сожалению, этот идеал так и не материализовался, за исключением исходного случая REST — всемирной паутины удобочитаемых документов.
На данный момент большинство интерфейсов, которые называют себя «RESTful», на самом деле представляют собой вычурный вид RPC, где данные запросов и ответов размазаны по методам, строкам запросов, заголовкам, кодам состояния, полезной нагрузке, и все это в различных хрупких форматах.
Большая часть единообразия современных интерфейсов RESTful находится в головах разработчиков. Они «знают», что POST /orders/
, вероятно, собирается добавить новый заказ. Но им по-прежнему приходится программировать своих клиентов, чтобы они «знали» об этом для каждого API, с которым они взаимодействуют, часто совершая множество ошибок.
Тем не менее, есть некоторое единообразие, которое действительно может быть полезно в коде. Например, если у вас есть «RESTful» API, вы часто можете почти бесплатно добавить к нему прозрачный, точно настраиваемый уровень кэширования. Это возможно, потому что (семантически правильные) HTTP-сообщения уже содержат всю стандартизированную информацию, необходимую для кэширования: метод запроса, URL-адрес, код состояния, Cache-Control
, Vary
и все такое. В gRPC вам нужно накатить собственное кэширование.
Но настоящая причина нынешнего доминирования «ОТДЫХА» не в таких незначительных возможностях. На самом деле это просто успех всемирной паутины. В какой-то момент истории выяснилось, что каждый уже имел производительный, гибкий HTTP-сервер (для обслуживания своего веб-сайта) и надежный HTTP-клиент (для просмотра указанного сайта), поэтому, когда люди начали добавлять машины -читаемые ресурсы, просто было проще и дешевле придерживаться одних и тех же способов HTTP. Они использовали HTTP-методы, заголовки и коды состояния, потому что их веб-серверы уже понимали и регистрировали это. Такие инструменты, как PHP, позволили им сделать это с нулевыми затратами на развертывание по сравнению с их обычными веб-сайтами.
Если для вас не важны единообразие и согласование со Всемирной паутиной, то RPC — проверенный и правильный архитектурный выбор, а gRPC — надежная реализация, которая может избавить вас от некоторых проблем, как объясняет ɐuıɥɔɐɯ.
person
Vasiliy Faronov
schedule
12.08.2017