Имитация API CRUD, защищенного ключом API

На первый взгляд
Цель: Имитация 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

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