Symulowanie interfejsu API CRUD zabezpieczonego przy użyciu klucza interfejsu API

Na pierwszy rzut oka
Celem: Symulowanie interfejsu API CRUD przy użyciu uwierzytelniania klucza interfejsu API
Czas: 10 minut
Plugins:CrudApiPlugin
Wymagania wstępne:konfigurowanie serwera proxy deweloperskiego

Podczas tworzenia aplikacji często korzystasz z backendowych interfejsów API. Czasami te interfejsy API nie są jeszcze dostępne lub inne zespoły aktualizują je w celu spełnienia najnowszych wymagań. Aby uniknąć oczekiwania, zazwyczaj należy utworzyć pozorny interfejs API, który zwraca potrzebne dane. Mimo że to podejście Cię odblokowuje, wymaga od Ciebie poświęcenia czasu na budowanie interfejsu API, który docelowo zastępujesz rzeczywistym. To staje się jeszcze bardziej skomplikowane, kiedy trzeba zabezpieczyć API kluczem API. Aby uniknąć marnowania czasu, możesz użyć serwera proxy deweloperskiego do symulowania interfejsu API CRUD i przyspieszenia opracowywania.

CrudApiPluginZa pomocą programu można symulować interfejs API CRUD (tworzenie, odczytywanie, aktualizowanie i usuwanie) przy użyciu magazynu danych w pamięci. Korzystając z prostego pliku konfiguracji, można zdefiniować adresy URL obsługiwane przez pozorny interfejs API i dane, które zwraca. Wtyczka obsługuje również mechanizm CORS na potrzeby użycia między domenami w aplikacjach klienckich. Wtyczka obsługuje również uwierzytelnianie klucza interfejsu API, dzięki czemu można zabezpieczyć pozorny interfejs API za pomocą klucza interfejsu API i przetestować, czy aplikacja prawidłowo wysyła klucz.

Scenario

Załóżmy, że tworzysz aplikację, która umożliwia użytkownikom zarządzanie klientami. Aby pobrać dane, musisz wywołać /customers endpoint interfejsu zaplecza API. Interfejs API jest zabezpieczony przy użyciu klucza API. Aby uniknąć oczekiwania na zakończenie pracy przez zespół zaplecza, decydujesz się użyć serwera proxy deweloperskiego do symulowania interfejsu API i zwrócenia potrzebnych danych.

Zanim rozpoczniesz

Zacznij od utworzenia symulowanego interfejsu API CRUD z danymi klienta. Po potwierdzeniu, że interfejs API działa, można go zabezpieczyć przy użyciu klucza interfejsu API.

Przykład 1: Symulować interfejs API CRUD zabezpieczony kluczem API w nagłówku

W pierwszym przykładzie zabezpieczasz cały interfejs API za pomocą klucza API, który klienci wysyłają w nagłówku HTTP.

W pliku customers-api.json dodaj informacje o uwierzytelnianiu za pomocą klucza API.

Plik: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})]"
    }
  ]
}

Ustawiając właściwość auth na apiKey, określasz, że interfejs API jest zabezpieczony kluczem API. W właściwości apiKeyAuthConfig określasz szczegóły konfiguracji. Właściwość apiKey określa prawidłowy klucz interfejsu API, a headerName właściwość określa nagłówek HTTP, w którym wtyczka szuka klucza.

Jeśli spróbujesz wywołać API bez ustawienia nagłówka X-API-Key na my-secret-key, otrzymasz odpowiedź 401 Unauthorized.

Przykład 2. Symulowanie interfejsu API CRUD zabezpieczonego przy użyciu klucza interfejsu API w parametrze zapytania

W niektórych interfejsach API klienci wysyłają klucz interfejsu API jako parametr ciągu zapytania. To zachowanie można symulować, konfigurując queryParameterName właściwość .

customers-api.json Zaktualizuj plik w następujący sposób:

Plik: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})]"
    }
  ]
}

W tym przykładzie wtyczka szuka klucza interfejsu API w parametrze api_key ciągu zapytania. Na przykład wywołanie https://api.contoso.com/v1/customers?api_key=my-secret-key kończy się powodzeniem, podczas gdy wywołanie https://api.contoso.com/v1/customers zwraca odpowiedź 401 Unauthorized.

Przykład 3. Symulowanie interfejsu API CRUD, który akceptuje klucz interfejsu API zarówno z nagłówka, jak i parametru zapytania

Możesz również skonfigurować wtyczkę tak, aby akceptowała klucz interfejsu API zarówno z nagłówka, jak i parametru zapytania. Wtyczka najpierw sprawdza nagłówek. Jeśli nagłówek nie zawiera klucza interfejsu API, wtyczka sprawdza parametr zapytania.

customers-api.json Zaktualizuj plik w następujący sposób:

Plik: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})]"
    }
  ]
}

W tym przykładzie żądanie zawierające klucz API zarówno w nagłówku X-API-Key, jak i w parametrze zapytania api_key jest autoryzowane.

Następny krok

Dowiedz się więcej o crudApiPlugin.

Przykłady

Zobacz również powiązane przykłady serwera proxy dla programistów: