Compartilhar via


Simular respostas

Usar o Proxy de Desenvolvimento é a maneira mais fácil de simular uma API. Se você estiver criando o front-end e a API ainda não estiver pronta, você precisará integrar seu back-end a um serviço externo ou deseja testar seu aplicativo com respostas diferentes, o Proxy de Desenvolvimento pode ajudá-lo a simular respostas de API. O que é ótimo em usar o Proxy de Desenvolvimento é que ele não requer alterações no código do aplicativo. Você define respostas simuladas para qualquer API com a qual seu aplicativo interage e o Proxy de Desenvolvimento intercepta as solicitações e responde com as respostas simuladas que você definiu.

Para simular respostas de API, você precisa fazer duas coisas:

  1. Crie um arquivo com respostas simuladas.
  2. Configure o Proxy de Desenvolvimento para usar as respostas simuladas.

Dica

Se você usar o Visual Studio Code, considere instalar a extensão Dev Proxy Toolkit. Ele simplifica significativamente o manuseio dos arquivos de configuração do Dev Proxy.

Criar um arquivo com respostas simuladas

O Proxy de Desenvolvimento simula as respostas da API usando o MockResponsePlugin. O plug-in permite que você defina um conjunto de respostas simuladas. Você define as simulações em um arquivo separado. O trecho de código a seguir demonstra uma resposta simulada simples para uma solicitação GET a https://jsonplaceholder.typicode.com/posts/1.

{
  "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v1.0.0/mockresponseplugin.schema.json",
  "mocks": [
    {
      "request": {
        "url": "https://jsonplaceholder.typicode.com/posts/1",
        "method": "GET"
      },
      "response": {
        "statusCode": 200,
        "body": {
          "userId": 1,
          "id": 1,
          "title": "sunt aut facere repellat provident occaecati excepturi optio reprehenderit",
          "body": "quia et suscipit\nsuscipit recusandae consequuntur expedita et cum\nreprehenderit molestiae ut ut quas totam\nnostrum rerum est autem sunt rem eveniet architecto"
        },
        "headers": [
          {
            "name": "Date",
            "value": "Wed, 19 Feb 2025 09:03:37 GMT"
          },
          {
            "name": "Content-Type",
            "value": "application/json; charset=utf-8"
          },
          {
            "name": "Content-Length",
            "value": "292"
          },
          // [...] trimmed for brevity
        ]
      }
    }
  ]
}

Dica

Em vez de criar o arquivo de simulações manualmente, você pode usar o MockGeneratorPlugin arquivo para gerar simulações com base nas solicitações interceptadas.

Ordem de precedência

O Dev Proxy compara os mocks na ordem em que você os define no arquivo de mocks. Se você definir várias respostas com a mesma URL e método, o Proxy de Desenvolvimento usará a primeira resposta correspondente.

Quando você usa a configuração a seguir, o proxy responde a todas as GET solicitações para https://graph.microsoft.com/v1.0/me/photo com 500 Internal Server Error.

{
  "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v1.0.0/mockresponseplugin.schema.json",
  "mocks": [
    {
      "request": {
        "url": "https://graph.microsoft.com/v1.0/me/photo",
        "method": "GET"
      },
      "response": {
        "statusCode": 500
      }
    },
    {
      "request": {
        "url": "https://graph.microsoft.com/v1.0/me/photo",
        "method": "GET"
      },
      "response": {
        "statusCode": 404
      }
    }
  ]
}

Suporte a curinga

O Dev Proxy compara os mocks na ordem em que você define nenhum arquivo de mocks. Você pode usar o caractere asterisco (*) para corresponder a qualquer série de caracteres na URL.

Quando você usa a configuração a seguir, o Dev Proxy responde a todas as solicitações para obter o perfil de qualquer usuário com a mesma resposta.

{
  "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v1.0.0/mockresponseplugin.mocksfile.schema.json",
  "mocks": [
    {
      "request": {
        "url": "https://graph.microsoft.com/v1.0/users/*"
      },
      "response": {
        "body": {
          "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#users/$entity",
          "businessPhones": ["+1 425 555 0109"],
          "displayName": "Adele Vance",
          "givenName": "Adele",
          "jobTitle": "Product Marketing Manager",
          "mail": "AdeleV@M365x214355.onmicrosoft.com",
          "mobilePhone": null,
          "officeLocation": "18/2111",
          "preferredLanguage": "en-US",
          "surname": "Vance",
          "userPrincipalName": "AdeleV@M365x214355.onmicrosoft.com",
          "id": "87d349ed-44d7-43e1-9a83-5f2406dee5bd"
        }
      }
    }
  ]
}

Quando você utiliza a configuração a seguir, o Dev Proxy retorna a mesma imagem do disco ao solicitar o binário da foto de qualquer usuário.

{
  "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v1.0.0/mockresponseplugin.mocksfile.schema.json",
  "mocks": [
    {
      "request": {
        "url": "https://graph.microsoft.com/v1.0/users/*/photo/$value"
      },
      "response": {
        "body": "@picture.jpg",
        "headers": [
          {
            "name": "content-type",
            "value": "image/jpeg"
          }
        ]
      }
    }
  ]
}

Quando você usa a configuração a seguir, o Dev Proxy retorna a mesma resposta quando você solicita obter o perfil do usuário atual com qualquer parâmetro de consulta.

{
  "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v1.0.0/mockresponseplugin.mocksfile.schema.json",
  "mocks": [
    {
      "request": {
        "url": "https://graph.microsoft.com/v1.0/me?*"
      },
      "response": {
        "body": {
          "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#users/$entity",
          "businessPhones": [
            "+1 412 555 0109"
          ],
          "displayName": "Megan Bowen",
          "givenName": "Megan",
          "jobTitle": "Auditor",
          "mail": "MeganB@M365x214355.onmicrosoft.com",
          "mobilePhone": null,
          "officeLocation": "12/1110",
          "preferredLanguage": "en-US",
          "surname": "Bowen",
          "userPrincipalName": "MeganB@M365x214355.onmicrosoft.com",
          "id": "48d31887-5fad-4d73-a9f5-3c356e68a038"
        }
      }
    }
  ]
}

Responder com o conteúdo de um arquivo

Para manter o arquivo de simulações limpo e organizado, você pode armazenar o conteúdo da resposta em um arquivo separado e referenciá-lo no arquivo de simulações. Para instruir o Dev Proxy a carregar o corpo de resposta simulado de um arquivo, defina a propriedade body como @ seguida pelo caminho do arquivo relativo ao arquivo de simulações.

Por exemplo, a seguinte configuração de resposta simulada instrui o Dev Proxy a responder a qualquer solicitação para https://graph.microsoft.com/v1.0/me com o conteúdo do response.json arquivo localizado na mesma pasta que o arquivo de simulações.

{
  "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v1.0.0/mockresponseplugin.mocksfile.schema.json",
  "mocks": [
    {
      "request": {
        "url": "https://graph.microsoft.com/v1.0/me",
        "method": "GET"
      },
      "response": {
        "body": "@response.json",
        "headers": [
          {
            "name": "content-type",
            "value": "application/json; odata.metadata=minimal"
          }
        ]
      }
    }
  ]
}

O uso do @-token funciona com texto e arquivos binários.

Configurar o Proxy de Desenvolvimento para usar as respostas simuladas

Depois de criar o arquivo de simulações, você precisa configurar o Proxy de Desenvolvimento para usar as respostas simuladas. Para configurar o Dev Proxy para simular respostas, adicione MockResponsePlugin à lista de plugins no arquivo devproxyrc.

{
  "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v1.0.0/rc.schema.json",
  "plugins": [
    {
      "name": "MockResponsePlugin",
      "enabled": true,
      "pluginPath": "~appFolder/plugins/DevProxy.Plugins.dll",
      "configSection": "mockResponsePlugin"
    }
  ],
  "urlsToWatch": [
    "https://jsonplaceholder.typicode.com/*"
  ],
  "mockResponsePlugin": {
    "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v1.0.0/mockresponseplugin.schema.json",
    "mocksFile": "mocks.json"
  },
  "logLevel": "information",
  "newVersionNotification": "stable",
  "showSkipMessages": true
}

Primeiro, adicione o MockResponsePlugin à lista de plug-ins. Você inclui uma referência à seção de configuração em que especifica o caminho para o arquivo de simulações.

Quando você inicia o Proxy de Desenvolvimento, ele lê o arquivo fictício e usa as respostas simuladas para responder às solicitações que correspondem às simulações definidas.

Suporte a solicitações não simuladas

O Proxy de Desenvolvimento dá suporte à geração de um erro quando o proxy intercepta uma solicitação não simulada. A capacidade de falhar solicitações não simuladas é útil para identificar solicitações que você não viu no seu arquivo de simulações.

Para habilitar esse recurso, adicione e ative a configuração blockUnmockedRequests na seção de configuração do MockResponsePlugin no arquivo devproxyrc.

{
  "mocksPlugin": {
    "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v1.0.0/mockresponseplugin.schema.json",
    "mocksFile": "mocks.json",
    "blockUnmockedRequests": true
  }
}

Quando o Proxy de Desenvolvimento intercepta uma solicitação que não pode simular, ele retorna uma 502 Bad Gateway resposta.

Próxima etapa

Saiba mais sobre o MockResponsePlugin.

Exemplos

Confira também os exemplos relacionados do Dev Proxy: