CrudApiPlugin
Имитирует API CRUD с хранилищем данных в памяти. Отправляет ответы JSON. Поддерживает CORS для междоменного использования клиентских приложений. При необходимости имитирует API-интерфейсы CRUD, защищенные с помощью Microsoft Entra.
Определение экземпляра подключаемого модуля
{
"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. | Да, при настройке auth entra |
Вы можете ссылаться на , 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. | Да, при настройке auth entra |
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"
}
]