<p>I see more and more software organizations using gRPC in their service-oriented architectures, but people are also still using REST. In what use cases does it make sense to use gRPC, and when does it make sense to use REST for inter-service communication?</p>
<p>Interestingly, I've come across open source projects that use both REST and gRPC. For instance, Kubernetes and Docker Swarm all employ gRPC to some extent for cluster coordination, but also expose REST APIs for interfacing with master/leader nodes. Why not use gRPC up and down?</p>
<p><strong>Edit</strong>: for a summary of my own thoughts on this topic, see
<a href="https://medium.com/@natemurthy/rest-rpc-and-brokered-messaging-b775aeb0db3" rel="nofollow noreferrer">https://medium.com/@natemurthy/rest-rpc-and-brokered-messaging-b775aeb0db3</a></p>

<p>When done correctly, REST improves long-term evolvability and scalability at the cost of performance and added complexity. REST is ideal for services that must be developed and maintained independently, like the Web itself. Client and server can be loosely coupled and change without breaking each other.</p>

<p>RPC services can be simpler and perform better, at the cost of flexibility and independence. RPC services are ideal for circumstances where client and server are tightly coupled and follow the same development cycle.</p>

<p>However, most so-called REST services don't really follow REST at all, because REST became just a buzzword for any kind of HTTP API. In fact, most so-called REST APIs are so tightly coupled, they offer no advantage over an RPC design. </p>

<p>Given that, my somewhat cynical answers to your question are:</p>

<ol>
<li><p>Some people are adopting gRPC for the same reason they adopted REST a few years ago: design-by-buzzword.</p></li>
<li><p>Many people are realizing the way they implement REST amounts to RPC anyway, so why not go with an standardized RPC framework and implement it correctly, instead of insisting on poor REST implementations?</p></li>
<li><p>REST is a solution for problems that appear in projects that span several organizations and have long-term goals. Maybe people are realizing they don't really need REST and looking for better options.</p></li>
</ol>
