API キーでセキュリティ保護された CRUD API をシミュレートする

概要
目標: API キー認証を使用して CRUD API をシミュレートする
時間: 10 分
Plugins:CrudApiPlugin
前提条件:開発プロキシを設定する

アプリをビルドするときは、多くの場合、バックエンド API と対話します。 これらの API がまだ利用できない場合や、他のチームが最新の要件を満たすように API を更新している場合があります。 待機を回避するには、通常、必要なデータを返すモック API を作成します。 この方法ではブロックが解除されますが、最終的に実際の API に置き換える API の構築に時間を費やす必要があります。 API キーを使用して API をセキュリティで保護する必要がある場合は、さらに複雑になります。 時間の無駄を避けるために、開発プロキシを使用して CRUD API をシミュレートし、開発を高速化できます。

CrudApiPluginを使用して、メモリ内データストアでCRUD(作成、読み取り、更新、削除)APIをシミュレートすることができます。 単純な構成ファイルを使用して、モック API でサポートされる URL と返されるデータを定義できます。 このプラグインでは、クライアント側アプリケーションからのクロスドメイン使用に対する CORS もサポートされています。 このプラグインは API キー認証もサポートしているため、API キーを使用してモック API をセキュリティで保護し、アプリがキーを正しく送信することをテストできます。

シナリオ

たとえば、ユーザーが顧客を管理できるアプリを構築しているとします。 データを取得するには、バックエンド API の /customers エンドポイントを呼び出す必要があります。 API は API キーで保護されます。 バックエンド チームが作業を完了するのを待つのを避けるために、開発プロキシを使用して API をシミュレートし、必要なデータを返します。

始める前の準備

まず、顧客データを使用してシミュレートされた CRUD API を します。 API が動作することを確認したら、API キーを使用して保護できます。

例 1: ヘッダー内の API キーでセキュリティ保護された CRUD API をシミュレートする

最初の例では、クライアントが HTTP ヘッダーで送信する API キーを使用して API 全体をセキュリティで保護します。

customers-api.json ファイルに、API キー認証に関する情報を追加します。

ファイル:customers-api.json

{
  "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v3.0.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})]"
    }
  ]
}

指定したauthapiKey プロパティを設定することで、API が API キーで保護されます。 apiKeyAuthConfig プロパティで、構成の詳細を指定します。 apiKey プロパティは有効な API キーを指定し、headerName プロパティはプラグインがキーを検索する HTTP ヘッダーを指定します。

X-API-Key ヘッダーを my-secret-key に設定せずに API を呼び出そうとすると、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.0.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_key query-string パラメーターで API キーを検索します。 たとえば、 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.0.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})]"
    }
  ]
}

この例では、 X-API-Key ヘッダーまたは api_key クエリ パラメーターに API キーを含む要求が承認されています。

次のステップ

CrudApiPlugin の詳細を確認します。

Samples

関連する開発プロキシのサンプルも参照してください。