CrudApiPlugin

Имитирует API CRUD с хранилищем данных в памяти. Отправляет ответы JSON. Поддерживает CORS для междоменного использования клиентских приложений. При необходимости имитирует API-интерфейсы CRUD, защищенные с помощью Microsoft Entra.

Снимок экрана: командная строка с прокси-сервером разработки, имитирующим API CRUD.

Определение экземпляра подключаемого модуля

{
  "name": "CrudApiPlugin",
  "enabled": true,
  "pluginPath": "~appFolder/plugins/dev-proxy-plugins.dll",
  "configSection": "customersApi"
}

Пример конфигурации

{
  "customersApi": {
    "apiFile": "customers-api.json"
  }
}

Свойства конфигурации

Свойство Описание
apiFile Путь к файлу, который содержит определение API CRUD

Параметры командной строки

None

Пример файла API

Ниже приведено несколько примеров файлов API, которые определяют API CRUD для получения сведений о клиентах.

Анонимный API CRUD

Ниже приведен пример файла API, который определяет анонимный API CRUD для получения сведений о клиентах.

{
  "$schema": "https://raw.githubusercontent.com/microsoft/dev-proxy/main/schemas/v0.14.1/crudapiplugin.schema.json",
  "baseUrl": "https://api.contoso.com/v1/customers",
  "dataFile": "customers-data.json",
  "actions": [
    {
      "action": "getAll"
    },
    {
      "action": "getOne",
      "url": "/{customer-id}",
      "query": "$.[?(@.id == {customer-id})]"
    },
    {
      "action": "create"
    },
    {
      "action": "merge",
      "url": "/{customer-id}",
      "query": "$.[?(@.id == {customer-id})]"
    },
    {
      "action": "update",
      "url": "/{customer-id}",
      "query": "$.[?(@.id == {customer-id})]"
    },
    {
      "action": "delete",
      "url": "/{customer-id}",
      "query": "$.[?(@.id == {customer-id})]"
    }
  ]
}

API CRUD, защищенный с помощью Microsoft Entra с помощью одного область

Ниже приведен пример файла API, который определяет API CRUD для получения сведений о клиентах, защищенных с помощью Microsoft Entra. Все действия защищены одним область. CrudApiPlugin проверяет аудиторию маркера, издателя и область.

{
  "$schema": "https://raw.githubusercontent.com/microsoft/dev-proxy/main/schemas/v0.14.1/crudapiplugin.schema.json",
  "baseUrl": "https://api.contoso.com/v1/customers",
  "dataFile": "customers-data.json",
  "auth": "entra",
  "entraAuthConfig": {
    "audience": "https://api.contoso.com",
    "issuer": "https://login.microsoftonline.com/contoso.com",
    "scopes": ["api://contoso.com/user_impersonation"]
  },
  "actions": [
    {
      "action": "getAll"
    },
    {
      "action": "getOne",
      "url": "/{customer-id}",
      "query": "$.[?(@.id == {customer-id})]"
    },
    {
      "action": "create"
    },
    {
      "action": "merge",
      "url": "/{customer-id}",
      "query": "$.[?(@.id == {customer-id})]"
    },
    {
      "action": "update",
      "url": "/{customer-id}",
      "query": "$.[?(@.id == {customer-id})]"
    },
    {
      "action": "delete",
      "url": "/{customer-id}",
      "query": "$.[?(@.id == {customer-id})]"
    }
  ]
}

API CRUD, защищенный с помощью Microsoft Entra с использованием определенных областей

Ниже приведен пример файла API, который определяет API CRUD для получения сведений о клиентах, защищенных с помощью Microsoft Entra. Действия защищены с помощью определенных областей. CrudApiPlugin проверяет аудиторию маркера, издателя и область.

{
  "$schema": "https://raw.githubusercontent.com/microsoft/dev-proxy/main/schemas/v0.14.1/crudapiplugin.schema.json",
  "baseUrl": "https://api.contoso.com/v1/customers",
  "dataFile": "customers-data.json",
  "auth": "entra",
  "entraAuthConfig": {
    "audience": "https://api.contoso.com",
    "issuer": "https://login.microsoftonline.com/contoso.com"
  },
  "actions": [
    {
      "action": "getAll",
      "auth": "entra",
      "entraAuthConfig": {
        "scopes": ["api://contoso.com/customer.read"]
      }
    },
    {
      "action": "getOne",
      "url": "/{customer-id}",
      "query": "$.[?(@.id == {customer-id})]",
      "auth": "entra",
      "entraAuthConfig": {
        "scopes": ["api://contoso.com/customer.read"]
      }
    },
    {
      "action": "create",
      "auth": "entra",
      "entraAuthConfig": {
        "scopes": ["api://contoso.com/customer.write"]
      }
    },
    {
      "action": "merge",
      "url": "/{customer-id}",
      "query": "$.[?(@.id == {customer-id})]",
      "auth": "entra",
      "entraAuthConfig": {
        "scopes": ["api://contoso.com/customer.write"]
      }
    },
    {
      "action": "update",
      "url": "/{customer-id}",
      "query": "$.[?(@.id == {customer-id})]",
      "auth": "entra",
      "entraAuthConfig": {
        "scopes": ["api://contoso.com/customer.write"]
      }
    },
    {
      "action": "delete",
      "url": "/{customer-id}",
      "query": "$.[?(@.id == {customer-id})]",
      "auth": "entra",
      "entraAuthConfig": {
        "scopes": ["api://contoso.com/customer.write"]
      }
    }
  ]
}

Свойства файла API

Свойство Описание Обязательно
actions Список действий, поддерживаемых API. Да
auth Определяет, защищен ли API. Допустимые значения: none, entra. По умолчанию none Нет
baseUrl Базовый URL-адрес, где прокси-сервер разработчика предоставляет URL-адрес. Прокси-сервер разработки добавляет базовый URL-адрес к URL-адресам, которые вы определяете в действиях. Да
dataFile Путь к файлу, который содержит данные для API. Да
entraAuthConfig Конфигурация для проверки подлинности Microsoft Entra. Да, при настройке authentra

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

должен dataFile определять массив JSON. Массив может быть пустым или содержать начальный набор объектов.

Свойства EntraAuthConfig

При настройке auth свойства в entraнеобходимо определить entraAuthConfig свойство . Если вы не определите его, CrudApiPlugin отобразит предупреждение, и API доступен анонимно.

Вы можете определить entraAuthConfig в файле API и в каждом действии API. При определении в файле API он применяется ко всем действиям. При определении для действия он переопределяет конфигурацию файла API для этого конкретного действия.

Свойство entraAuthConfig имеет следующие свойства.

Свойство Описание Обязательно Значение по умолчанию
audience Укажите допустимую аудиторию для маркера. Если этот параметр указан, CrudApiPlugin сравнивает аудиторию из токена с этой аудиторией. Если они отличаются, CrudApiPlugin возвращает ответ 401 Unauthorized. Нет None
issuer Укажите допустимого издателя маркера. Если этот параметр указан, CrudApiPlugin сравнивает издателя из маркера с этим издателем. Если они отличаются, CrudApiPlugin возвращает ответ 401 Unauthorized. Нет None
scopes Укажите массив допустимых областей. Если этот параметр указан, CrudApiPlugin управляет наличием в маркере любой из областей. Если ни та из областей отсутствует, CrudApiPlugin возвращает ответ 401 Unauthorized. Нет None
roles Укажите массив допустимых ролей. Если этот параметр указан, CrudApiPlugin управляет наличием в маркере любой из ролей. Если ни у той из ролей нет, crudApiPlugin возвращает ответ 401 Unauthorized. Нет None
validateLifetime Задайте значение true для CrudApiPlugin, чтобы проверить, не истек ли срок действия маркера. Когда CrudApiPlugin обнаруживает маркер с истекшим сроком действия, он возвращает ответ 401 Unauthorized. Нет false
validateSigningKey Задайте значение true для CrudApiPlugin, чтобы проверить подлинность маркера. Когда CrudApiPlugin обнаруживает маркер с недопустимой подписью (например, из-за того, что вы изменили маркер вручную), он возвращает ответ 401 Unauthorized. Нет false

Свойства действия

Каждое действие в списке actions имеет следующие свойства.

Свойство Описание Обязательно Значение по умолчанию
action Определяет, как прокси-сервер разработчика взаимодействует с данными. Возможные значения: getAll, getOne, getMany, create, merge, update, . delete Да Нет
auth Определяет, защищено ли действие. Допустимые значения: none, entra. Нет none
entraAuthConfig Конфигурация для проверки подлинности Microsoft Entra. Да, при настройке authentra None
method Метод HTTP, который используется прокси-сервером разработчика для предоставления действия. Нет Зависит от действия
query Newtonsoft JSONPath query that Dev Proxy использует для поиска данных в файле данных. Нет Empty
url URL-адрес, в котором прокси-сервер разработчика предоставляет действие. Прокси-сервер разработчика добавляет URL-адрес к базовому URL-адресу. Нет Empty

URL-адрес, указанный в свойстве url , может содержать параметры. Параметры определяются путем упаковки имени параметра в фигурные скобки, например {customer-id}. При маршрутизации запроса прокси-сервер разработчика заменяет параметр значением из URL-адреса запроса.

В запросе можно использовать тот же параметр. Например, если вы определяете url как /customers/{customer-id} , а query — как $.[?(@.id == {customer-id})], прокси-сервер разработчика {customer-id} заменяет параметр в запросе значением из URL-адреса запроса.

Важно!

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

Если подключаемый модуль не может найти данные в файле данных с помощью запроса, он возвращает 404 Not Found ответ.

Каждый тип действия имеет метод HTTP по умолчанию. Вы можете переопределить значение по умолчанию, указав method свойство . Например, get тип действия имеет метод GETпо умолчанию . Если вы хотите использовать POST вместо него, укажите method свойство как POST.

Массив actions определяет коллекцию действий, которые требуется макетировать. Вы можете определить несколько действий для одного и того же метода HTTP и типа действия. Например, можно определить два getOne действия: одно из них получает клиента по идентификатору, а другое — по адресу электронной почты. Обязательно определите уникальные URL-адреса для каждого действия.

Действия

Прокси-сервер разработки поддерживает следующие действия для API CRUD.

Действие Описание Default - метод
getAll Возвращает все элементы из файла данных. GET
getOne Возвращает один элемент из файла данных. Сбой, если запрос соответствует нескольким элементам. GET
getMany Возвращает несколько элементов из файла данных. Возвращает пустой массив, если запрос не соответствует ни одному элементу. GET
create Добавляет новый элемент в коллекцию данных. POST
merge Объединяет данные из запроса с данными из файла данных. PATCH
update Заменяет данные в файле данных данными из запроса. PUT
delete Удаляет элемент из файла данных. DELETE

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

Пример файла данных

[
  {
    "id": 1,
    "name": "Contoso",
    "address": "4567 Main St Buffalo, NY 98052"
  },
  {
    "id": 2,
    "name": "Fabrikam",
    "address": "4567 Main St Buffalo, NY 98052"
  }
]