Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Имитирует API CRUD с хранилищем данных в памяти. Отправляет ответы JSON. Поддерживает CORS для использования между доменами из клиентских приложений. При необходимости имитирует API CRUD, защищенные с помощью Microsoft Entra.
Определение экземпляра подключаемого модуля
{
"name": "CrudApiPlugin",
"enabled": true,
"pluginPath": "~appFolder/plugins/DevProxy.Plugins.dll",
"configSection": "customersApi"
}
Пример конфигурации
{
"customersApi": {
"$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v1.0.0/crudapiplugin.schema.json",
"apiFile": "customers-api.json"
}
}
Свойства конфигурации
Свойство | Описание |
---|---|
apiFile |
Путь к файлу, который содержит определение API CRUD |
Параметры командной строки
Никакой
Пример файла API
Ниже приведены несколько примеров файлов API, определяющих API CRUD для получения сведений о клиентах.
Анонимный API CRUD
Ниже приведен пример файла API, который определяет анонимный API CRUD для получения сведений о клиентах.
{
"$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v1.0.0/crudapiplugin.apifile.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/dotnet/dev-proxy/main/schemas/v1.0.0/crudapiplugin.apifile.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/dotnet/dev-proxy/main/schemas/v1.0.0/crudapiplugin.apifile.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 несанкционированный ответ. | Нет | Никакой |
issuer |
Укажите допустимый издатель маркера. При указании CrudApiPlugin сравнивает издателя из маркера с этим издателем. Если они отличаются, CrudApiPlugin возвращает 401 несанкционированный ответ. | Нет | Никакой |
scopes |
Укажите массив допустимых областей. При указании CrudApiPlugin управляет, если в маркере присутствует любой из областей. Если ни в чем из областей нет, CrudApiPlugin возвращает 401 несанкционированный ответ. | Нет | Никакой |
roles |
Укажите массив допустимых ролей. При указании CrudApiPlugin управляет, если в маркере присутствует любой из ролей. Если ни ни из ролей нет, CrudApiPlugin возвращает 401 неавторизованный ответ. | Нет | Никакой |
validateLifetime |
Установите значение true для CrudApiPlugin, чтобы проверить, не истек ли срок действия маркера. Когда CrudApiPlugin обнаруживает истекший срок действия маркера, он возвращает 401 несанкционированный ответ. |
Нет | false |
validateSigningKey |
Установите значение true для CrudApiPlugin, чтобы проверить подлинность маркера. Когда CrudApiPlugin обнаруживает маркер с недопустимой подписью (например, из-за изменения маркера вручную), он возвращает 401 несанкционированный ответ. |
Нет | false |
Свойства действия
Каждое действие в списке actions
имеет следующие свойства.
Свойство | Описание | Обязательно | По умолчанию |
---|---|---|---|
action |
Определяет, как прокси-сервер разработки взаимодействует с данными. Возможные значения: getAll , getOne , getMany , create , merge , update , delete . |
Да | Никакой |
auth |
Определяет, является ли действие защищенным или нет. Допустимые значения: none , entra . |
Нет | none |
entraAuthConfig |
Настройка проверки подлинности Microsoft Entra. | Да, при настройке auth на entra |
Никакой |
method |
Метод HTTP, который используется для предоставления действия прокси-сервера разработки. | Нет | Зависит от действия |
query |
Newtonsoft JSONPath запрос, который используется для поиска данных в файле данных. | Нет | Пустой |
url |
URL-адрес, в котором прокси-сервер разработки предоставляет действие. Прокси-сервер разработки добавляет URL-адрес к базовому URL-адресу. | Нет | Пустой |
URL-адрес, указанный в свойстве url
, может содержать параметры. Параметры определяются путем упаковки имени параметра в фигурные скобки, например {customer-id}
. При маршрутизации запроса прокси-сервер разработки заменяет параметр значением из URL-адреса запроса.
В запросе можно использовать тот же параметр. Например, если определить url
как /customers/{customer-id}
и query
как $.[?(@.id == {customer-id})]
, прокси-сервер разработки заменяет параметр {customer-id}
в запросе значением из URL-адреса запроса.
Важный
Dev Proxy реализует JSONPath в свойстве query
с помощью Newtonsoft.Json. Существуют некоторые ограничения на использование, например, он поддерживает только одинарные кавычки. Перед отправкой проблемы обязательно проверьте запрос.
Если подключаемый модуль не может найти данные в файле данных с помощью запроса, он возвращает 404 Not Found
ответ.
Каждый тип действия имеет метод HTTP по умолчанию. Можно переопределить значение по умолчанию, указав свойство method
. Например, тип действия get
имеет метод GET
по умолчанию. Если вы хотите использовать POST
вместо этого, укажите свойство method
как POST
.
Массив actions
определил коллекцию действий, которые требуется макетировать. Можно определить несколько действий для одного и того же метода HTTP и типа действия. Например, можно определить два действия getOne
, один из них извлекает клиента по идентификатору и другому по адресу электронной почты. Обязательно определите уникальные URL-адреса для каждого действия.
Действия
Прокси-сервер разработки поддерживает следующие действия для API CRUD.
Действие | Описание | Метод по умолчанию |
---|---|---|
getAll |
Возвращает все элементы из файла данных. | GET |
getOne |
Возвращает один элемент из файла данных. Сбой при совпадении запроса с несколькими элементами. | GET |
getMany |
Возвращает несколько элементов из файла данных. Возвращает пустой массив, если запрос не соответствует элементам. | GET |
create |
Добавляет новый элемент в коллекцию данных. | POST |
merge |
Объединяет данные из запроса с данными из файла данных. | PATCH |
update |
Заменяет данные в файле данных данными из запроса. | PUT |
delete |
Удаляет элемент из файла данных. | DELETE |
При создании нового элемента с помощью действия create
подключаемый модуль не проверяет его форму и добавляет его в коллекцию данных as-is.
Пример файла данных
[
{
"id": 1,
"name": "Contoso",
"address": "4567 Main St Buffalo, NY 98052"
},
{
"id": 2,
"name": "Fabrikam",
"address": "4567 Main St Buffalo, NY 98052"
}
]