概要
目標: 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})]"
}
]
}
指定したauthに apiKey プロパティを設定することで、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
関連する開発プロキシのサンプルも参照してください。
Dev Proxy