gRPC

Index

Overview

With the growing emergence of IoT, microservices and mesh networks, APIs need to be more performant and scalable than ever before. This has given rise to the growing adoption of gRPC, a high-performance, open source, universal RPC framework developed at Google.

As of 2020.5, Insomnia supports making gRPC requests alongside REST and GraphQL!

Create a request

In order to create a new gRPC request, click on + in the sidebar and then "New Request".

Then, in the modal that opens, set a name for your request and select gRPC from the method drop-down. Click create.

You will be prompted to select a proto file. Click on "Add Proto File" and select a proto file from your file system. You can get an example proto file from grpcb.in. Once added, it should be automatically selected. Click save.

You should now see a request in the sidebar, and on clicking "Select Method" you should see the services from your proto file listed.

Proto file management

In the first iteration, Insomnia allows you to upload your proto file to a workspace and consume it with multiple requests. Insomnia will ingest the contents of your proto file, and it will not be linked with the source file on your file-system. This means, if you add your proto file into Insomnia, and then change the source file, you will need to re-upload it.

As such, a proto file also cannot import a different proto file from your file system, because the relative path link will be lost. In future iterations we intend to extend the ways in which you can input a proto file, including keeping in sync with the file system, loading from a network location, and supporting imports.

Add

We added a proto file when creating a request above. Whenever you need to select a proto file, you will be given the option to add a new one. In the example above, we added a proto file when creating a new request, but lets say we now want to change the proto file linked to the current request by adding a new one. Navigate to the request, and select "click to change proto file".

This will open the proto files modal again, and list the one we added earlier. Click "Add Proto File", and add a new one. We now see two proto files added to the workspace.

Rename

Double click on a proto file name in order to edit it.

Re-upload

Click on the upload button and select a proto file from your file system. This can be any file, it does not have to be the exact same file. Just remember, when you re-upload a proto file, all requests that link to the file you have changed, will also update. Ideally you will only re-upload the same proto file, when the service definition has changed, rather than a new file altogether.

Delete

Click on the delete button. You will be prompted with a confirmation message indicating that requests that use that proto file are likely to break because the source proto file information has been lost. In the future, we intend to expand on proto file deletion to allow for more control over dependent requests.

Making requests

Insomnia supports all four RPC types defined by gRPC. These are: Unary, Client Streaming, Server Streaming, and Bidirectional Streaming. The following examples use hello.proto from grpcb.in.

Unary

/hello.HelloService/SayHello is unary RPC. You send a single message, and the server responds with a single message.

Specify a body, and click send.

Server Streaming

/hello.HelloService/LotsOfReplies is server streaming RPC. You send a single message, and the server responds with multiple messages.

Specify a body, and click send.

Note: it is up to the server how quickly it responds. In the example below, the second request uses grpcbin.proto, where the server stream responses much slower, and is easier to visualize.

Client Streaming

/hello.HelloService/LotsOfGreetings is client streaming RPC. You send a multiple messages, and the server responds with single message.

Click start to open a channel with the server. Now, edit the body with the contents of your first message, and press the "Stream" button to send that message. You should see a read-only snapshot of the message appear as a tab. You can now edit the contents in the Body tab again, and press "Stream" each time you want to send a new message. Once all messages have been sent, click "Commit" and the server should respond accordingly.

Bidirectional Streaming

/hello.HelloService/BiDiHello is bidirectional streaming RPC. You send multiple messages, and the server responds with multiple messages.

As the name suggests, this is a combination of server and client streaming. As such, the steps to send messages are identical to client streaming above, and the manner in which the server chooses to respond is identical to server streaming. Be sure to press "commit" once you have finished sending all your messages, and allow the server to terminate the connection.

Cancel a request

Any time a request has been sent (unary, server streaming) or a stream is open (client and bidirectional streaming), the "Send" or "Start" button will change to "Cancel". Pressing this will terminate the connection and show an appropriate message. You can have multiple requests running concurrently, and cancel them individually.

TLS/SSL

Often a gRPC endpoint will be secured by TLS, and Insomnia will allow you to connect to these endpoints using simple SSL. The ability to provide custom certificates is coming in the future. 

In order to enable TLS, prefix the host with grpcs://.

For example, grpcb.in has an unsecured endpoint at grpcb.in:9000, and a secured endpoint at grpcb.in:9001.

Making a request to grpcb.in:9001 will fail.

Making a request to grpcs://grpcb.in:9001 will succeed.

Known limitations

As of 2020.5.0, gRPC in Insomnia does not include: