Skip to main content

Using GraphQL in Azure API Management–Part 2

We’ll continue our exploration of the GraphQL features in Azure API Management by having a look at another feature; the possibility to transform an existing SOAP or REST API in an GraphQL API(Synthetic GraphQL). (If you missed the previous post in this series, have a look here.) Let's walk through the steps.

The REST API

Let’s first have a look at our REST API that we’ll use in this post. I’ve created an Azure Function that can be called through a GET request and returns a Person object(similar to the GraphQL API I used in the previous post).

Here is the related code:

Create a Synthetic GraphQL API

Let’s see how we can expose this REST API as a ‘Synthetic GraphQL’ API through Azure API Management.

  • Go to your Azure API Management instance in the Azure portal.
  • From the side menu, select APIs in the APIs section:

  • Choose Synthetic GraphQL under Define a new API:

  • In the dialog box specify the following fields:
    • Display name: The name you want to use to recognize your API
    • Name: Autogenerated based on the display name
    • Schema file: The GraphQL schema that will be exposed through this endpoint
  • In this example, I’ll use the following GraphQL schema:
  • Click on Create to import the GraphQL schema.
  • After the API is imported you can browse the schema on the Design tab:

Of course right now there isn’t anything useful with this API as it isn’t linked to our existing REST API.  To change this, we have to create a set-graphql-resolver policy to map a field in the schema to an existing HTTP endpoint.

  • In the Backend processing section, select the Backend Policy code editor:

  • Configure the set-graphql-resolver policy to resolve our REST api using an HTTP data source:

  • Click on Save to apply the policy.

  • To test our API endpoint, go to the Test tab. Select the fields you want to fetch or write your GraphQL query from scratch:

More information: https://docs.microsoft.com/en-us/azure/api-management/graphql-schema-resolve-api

Popular posts from this blog

Podman– Command execution failed with exit code 125

After updating WSL on one of the developer machines, Podman failed to work. When we took a look through Podman Desktop, we noticed that Podman had stopped running and returned the following error message: Error: Command execution failed with exit code 125 Here are the steps we tried to fix the issue: We started by running podman info to get some extra details on what could be wrong: >podman info OS: windows/amd64 provider: wsl version: 5.3.1 Cannot connect to Podman. Please verify your connection to the Linux system using `podman system connection list`, or try `podman machine init` and `podman machine start` to manage a new Linux VM Error: unable to connect to Podman socket: failed to connect: dial tcp 127.0.0.1:2655: connectex: No connection could be made because the target machine actively refused it. That makes sense as the podman VM was not running. Let’s check the VM: >podman machine list NAME         ...

Azure DevOps/ GitHub emoji

I’m really bad at remembering emoji’s. So here is cheat sheet with all emoji’s that can be used in tools that support the github emoji markdown markup: All credits go to rcaviers who created this list.

Cleaner switch expressions with pattern matching in C#

Ever find yourself mapping multiple string values to the same result? Being a C# developer for a long time, I sometimes forget that the C# has evolved so I still dare to chain case labels or reach for a dictionary. Of course with pattern matching this is no longer necessary. With pattern matching, you can express things inline, declaratively, and with zero repetition. A small example I was working on a small script that should invoke different actions depending on the environment. As our developers were using different variations for the same environment e.g.  "tst" alongside "test" , "prd" alongside "prod" .  We asked to streamline this a long time ago, but as these things happen, we still see variations in the wild. This brought me to the following code that is a perfect example for pattern matching: The or keyword here is a logical pattern combinator , not a boolean operator. It matches if either of the specified pattern...