Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
На первый взгляд
Цель: Имитация API CRUD с помощью проверки подлинности ключа API
Время: 10 минут
Подключаемые модули:CrudApiPlugin
Предварительные требования:настройка прокси-сервера разработки
При создании приложений часто взаимодействуют с внутренними API. Иногда эти API еще недоступны или другие команды обновляют их в соответствии с последними требованиями. Чтобы избежать ожидания, обычно создается макет API, который возвращает необходимые данные. Хотя этот подход разблокирует вас, это требует времени для создания API, который вы в конечном итоге заменяете реальным. Он становится еще более сложным, когда необходимо защитить API с помощью ключа API. Чтобы избежать тратить время, можно использовать прокси разработки для имитации API CRUD и ускорения разработки.
Используя CrudApiPlugin, вы можете имитировать API CRUD (создание, чтение, обновление, удаление) с помощью хранилища данных в оперативной памяти. С помощью простого файла конфигурации можно определить URL-адреса, поддерживаемые API макета и возвращаемые им данные. Плагин также поддерживает CORS для кросс-доменного использования в клиентских приложениях. Плагин также поддерживает аутентификацию по ключу API, так что вы можете защитить свой имитированный API с помощью ключа API и проверить, что ваше приложение правильно отправляет этот ключ.
Сценарий
Предположим, вы создаете приложение, которое позволяет пользователям управлять клиентами. Чтобы получить данные, необходимо вызвать /customers конечную точку серверного API. API защищен ключом API. Чтобы избежать ожидания завершения работы серверной команды, вы решили использовать прокси разработки для имитации API и возврата необходимых данных.
Перед тем как начать
Сначала создайте имитированный API CRUD с данными клиента. Убедившись, что API работает, его можно защитить с помощью ключа API.
Пример 1. Имитация API CRUD, защищенного ключом API в заголовке
В первом примере вы защищаете весь API с помощью ключа API, который клиенты отправляют в заголовке HTTP.
В файле customers-api.json добавьте сведения об аутентификации с помощью ключа API.
Файл:customers-api.json
{
"$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v3.1.0/crudapiplugin.apifile.schema.json",
"baseUrl": "https://api.contoso.com/v1/customers",
"dataFile": "customers-data.json",
"auth": "apiKey",
"apiKeyAuthConfig": {
"apiKey": "my-secret-key",
"headerName": "X-API-Key"
},
"actions": [
{
"action": "getAll"
},
{
"action": "getOne",
"url": "/{customer-id}",
"query": "$.[?(@.id == {customer-id})]"
},
{
"action": "create"
},
{
"action": "merge",
"url": "/{customer-id}",
"query": "$.[?(@.id == {customer-id})]"
},
{
"action": "delete",
"url": "/{customer-id}",
"query": "$.[?(@.id == {customer-id})]"
}
]
}
Установив свойству auth значение apiKey, вы указываете, что API защищён ключом API. В свойстве apiKeyAuthConfig укажите сведения о конфигурации. Свойство apiKey указывает допустимый ключ API, а headerName свойство задает заголовок HTTP, в котором подключаемый модуль ищет ключ.
Если вы попытаетесь вызвать API, не установив заголовок X-API-Key в значение my-secret-key, вы получите ответ 401 Unauthorized.
Пример 2. Имитация API CRUD, защищенного ключом API в параметре запроса
В некоторых API клиенты отправляют ключ API в качестве параметра строки запроса. Это поведение можно имитировать, настроив queryParameterName свойство.
customers-api.json Обновите файл следующим образом:
Файл:customers-api.json
{
"$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v3.1.0/crudapiplugin.apifile.schema.json",
"baseUrl": "https://api.contoso.com/v1/customers",
"dataFile": "customers-data.json",
"auth": "apiKey",
"apiKeyAuthConfig": {
"apiKey": "my-secret-key",
"queryParameterName": "api_key"
},
"actions": [
{
"action": "getAll"
},
{
"action": "getOne",
"url": "/{customer-id}",
"query": "$.[?(@.id == {customer-id})]"
},
{
"action": "create"
},
{
"action": "merge",
"url": "/{customer-id}",
"query": "$.[?(@.id == {customer-id})]"
},
{
"action": "delete",
"url": "/{customer-id}",
"query": "$.[?(@.id == {customer-id})]"
}
]
}
В этом примере подключаемый модуль ищет ключ API в параметре api_key строки запроса. Например, вызов https://api.contoso.com/v1/customers?api_key=my-secret-key завершается успешно, а вызов https://api.contoso.com/v1/customers возвращает ответ 401 Unauthorized.
Пример 3. Имитация API CRUD, принимающего ключ API из параметра заголовка и запроса.
Вы также можете настроить подключаемый модуль, чтобы принять ключ API как из заголовка, так и параметра запроса. Плагин сначала проверяет заголовок. Если заголовок не содержит ключ API, подключаемый модуль проверяет параметр запроса.
customers-api.json Обновите файл следующим образом:
Файл:customers-api.json
{
"$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v3.1.0/crudapiplugin.apifile.schema.json",
"baseUrl": "https://api.contoso.com/v1/customers",
"dataFile": "customers-data.json",
"auth": "apiKey",
"apiKeyAuthConfig": {
"apiKey": "my-secret-key",
"headerName": "X-API-Key",
"queryParameterName": "api_key"
},
"actions": [
{
"action": "getAll"
},
{
"action": "getOne",
"url": "/{customer-id}",
"query": "$.[?(@.id == {customer-id})]"
},
{
"action": "create"
},
{
"action": "merge",
"url": "/{customer-id}",
"query": "$.[?(@.id == {customer-id})]"
},
{
"action": "delete",
"url": "/{customer-id}",
"query": "$.[?(@.id == {customer-id})]"
}
]
}
В этом примере запрос, включающий ключ API в заголовке X-API-Key или api_key параметре запроса, авторизован.
Следующий шаг
Дополнительные сведения о CrudApiPlugin.
Samples
См. также связанные примеры прокси для разработки: