Поделиться через


Макет ответов

Использование прокси-сервера разработки — самый простой способ издеваться над API. Независимо от того, разрабатываете ли вы фронтенд, а API еще не готов, необходимо ли интегрировать вашу серверную часть с внешней службой или хотите протестировать приложение с использованием различных ответов, Dev Proxy может помочь имитировать ответы API. Преимущество использования Dev Proxy заключается в том, что он не требует никаких изменений в коде вашего приложения. Вы определяете макетные ответы для любого API, с которым взаимодействует приложение, и прокси-сервер разработки перехватывает запросы и отвечает с заданными вами макетными ответами.

Чтобы макетировать ответы API, необходимо выполнить две действия:

  1. Создайте файл с макетными ответами.
  2. Настройте прокси-сервер разработки для использования макетных ответов.

Советы

Если вы используете Visual Studio Code, подумайте об установке расширения набора инструментов прокси для разработки. Это значительно упрощает работу с файлами конфигурации прокси-сервера разработки.

Создание файла с макетными ответами

Прокси-сервер разработчика макетирует ответы API с помощью MockResponsePlugin. Подключаемый модуль позволяет определить набор макетных ответов. Вы определяете макеты в отдельном файле . В следующем фрагменте кода показан простой макетный ответ для запроса GET на https://jsonplaceholder.typicode.com/posts/1.

{
  "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v0.29.2/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
        ]
      }
    }
  ]
}

Советы

Вместо создания файла макетов вручную можно использовать MockGeneratorPlugin для создания файла макетов на основе перехватанных запросов.

Приоритет порядка

Прокси-сервер разработки сопоставляет макеты в порядке их определения в файле макетов. При определении нескольких ответов с одинаковым URL-адресом и методом прокси-сервер разработки использует первый соответствующий ответ.

При использовании следующей конфигурации прокси-сервер отвечает на все запросы GET в адрес https://graph.microsoft.com/v1.0/me/photo с 500 Internal Server Error.

{
  "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v0.29.2/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
      }
    }
  ]
}

Поддержка подстановочных знаков

Прокси-сервер разработки поддерживает использование подстановочных знаков в свойстве URL-адреса. Символ звездочки (*) можно использовать для сопоставления любого ряда символов в URL-адресе.

При использовании следующей конфигурации прокси-сервер разработки отвечает на все запросы для получения профиля любого пользователя одним и тем же ответом.

{
  "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v0.29.2/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"
        }
      }
    }
  ]
}

При использовании следующей конфигурации прокси-сервер разработки возвращает тот же образ с диска при запросе на получение двоичного файла фотографии любого пользователя.

{
  "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v0.29.2/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"
          }
        ]
      }
    }
  ]
}

При использовании следующей конфигурации прокси-сервер разработки возвращает тот же ответ при запросе на получение профиля текущего пользователя с любым параметром строки запроса.

{
  "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v0.29.2/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"
        }
      }
    }
  ]
}

Ответьте, передав содержимое файла

Чтобы сохранить файл макетов чистым и упорядоченным, вы можете хранить содержимое ответа в отдельном файле и ссылаться на него в файле макетов. Чтобы прокси-сервер разработки загрузил тело имитации ответа из файла, установите для свойства body значение @, а затем укажите путь к файлу относительно файла макетов.

Например, следующая конфигурация макета ответа указывает прокси-серверу разработки реагировать на любой запрос на https://graph.microsoft.com/v1.0/me с содержимым файла response.json, расположенного в той же папке, что и файл макетов.

{
  "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v0.29.2/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"
          }
        ]
      }
    }
  ]
}

Использование токена @совместимо с текстовыми и двоичными файлами .

Настройка прокси-сервера разработки для использования макетных ответов

После создания файла макетов необходимо настроить Dev Proxy для использования макетных ответов. Чтобы настроить прокси Dev для имитации ответов, добавьте MockResponsePlugin в список подключаемых модулей в файле devproxyrc.

{
  "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v0.29.2/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/v0.29.2/mockresponseplugin.schema.json",
    "mocksFile": "mocks.json"
  },
  "logLevel": "information",
  "newVersionNotification": "stable",
  "showSkipMessages": true
}

Сначала вы добавите MockResponsePlugin в список подключаемых модулей. Вы включаете ссылку на его раздел конфигурации, в котором указывается путь к файлу макетов.

При запуске прокси-сервера разработки он считывает файл макетов и использует макетные ответы для реагирования на запросы, соответствующие определенным макетам.

Поддержка реальных запросов

Прокси-сервер разработки поддерживает выбрасывание ошибки, когда прокси-сервер перехватывает нереализованный запрос. Возможность обработки не смоделированных запросов полезна для идентификации пропущенных запросов в вашем файле макетов.

Чтобы включить эту функцию, добавьте и включите параметр blockUnmockedRequestsMockResponsePlugin конфигурации в файле devproxyrc.

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

Когда прокси-сервер разработки перехватывает запрос, который он не может эмулировать, он возвращает ответ 502 Bad Gateway.

Следующий шаг

Дополнительные сведения о MockResponsePlugin.

Образцы

См. также связанные примеры прокси-сервера для разработки: