Bagikan melalui


Respons tiruan

Sekilas
Tujuan: Mengembalikan respons API yang telah ditentukan sebelumnya tanpa memanggil API nyata
Waktu: 10 menit
Plugins:MockResponsePlugin
Prasyarat:Menyiapkan Proksi Dev

Menggunakan Dev Proxy adalah cara paling mudah untuk mensimulasikan API. Baik Anda membangun front-end dan API belum siap, Anda perlu mengintegrasikan back-end Anda dengan layanan eksternal, atau Anda ingin menguji aplikasi Anda dengan respons yang berbeda, Dev Proxy dapat membantu Anda mensimulasikan respons API. Apa yang hebat tentang menggunakan Dev Proxy adalah tidak memerlukan perubahan apa pun pada kode aplikasi Anda. Anda menentukan respons tiruan untuk API apa pun yang berinteraksi dengan aplikasi Anda dan Dev Proxy mencegat permintaan dan merespons dengan respons tiruan yang Anda tentukan.

Untuk mengejek respons API, Anda perlu melakukan dua hal:

  1. Buat file dengan respons tiruan.
  2. Konfigurasikan Dev Proxy untuk menggunakan respons tiruan.

Ujung

Jika Anda menggunakan Visual Studio Code, pertimbangkan untuk menginstal ekstensi Dev Proxy Toolkit. Ini secara signifikan menyederhanakan bekerja dengan file konfigurasi Dev Proxy.

Membuat file dengan respons tiruan

Dev Proxy meniru respons API menggunakan MockResponsePlugin. Plugin memungkinkan Anda menentukan serangkaian respons tiruan. Anda menentukan tiruan dalam file terpisah . Cuplikan kode berikut menunjukkan respons tiruan sederhana untuk permintaan GET ke https://jsonplaceholder.typicode.com/posts/1.

File: mocks.json

{
  "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v2.0.0/mockresponseplugin.mocksfile.schema.json",
  "mocks": [
    {
      "request": {
        "url": "https://jsonplaceholder.typicode.com/posts/1",
        "method": "GET"
      },
      "response": {
        "statusCode": 200,
        "body": {
          "userId": 1,
          "id": 1,
          "title": "sunt aut facere repellat provident occaecati excepturi optio reprehenderit",
          "body": "quia et suscipit\nsuscipit recusandae consequuntur expedita et cum\nreprehenderit molestiae ut ut quas totam\nnostrum rerum est autem sunt rem eveniet architecto"
        },
        "headers": [
          {
            "name": "Date",
            "value": "Wed, 19 Feb 2025 09:03:37 GMT"
          },
          {
            "name": "Content-Type",
            "value": "application/json; charset=utf-8"
          },
          {
            "name": "Content-Length",
            "value": "292"
          }
        ]
      }
    }
  ]
}

Ujung

Alih-alih membuat file tiruan secara manual, Anda dapat menggunakan MockGeneratorPlugin untuk menghasilkan file tiruan berdasarkan permintaan yang disadap.

Urutan prioritas

Dev Proxy mencocokkan mock sesuai urutan yang Anda tentukan dalam file mock. Jika Anda menentukan beberapa respons dengan URL dan metode yang sama, Dev Proxy menggunakan respons pencocokan pertama.

Saat Anda menggunakan konfigurasi berikut, proxy akan merespons semua permintaan GET ke https://graph.microsoft.com/v1.0/me/photo dengan 500 Internal Server Error.

File: mocks.json

{
  "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v2.0.0/mockresponseplugin.mocksfile.schema.json",
  "mocks": [
    {
      "request": {
        "url": "https://graph.microsoft.com/v1.0/me/photo",
        "method": "GET"
      },
      "response": {
        "statusCode": 500
      }
    },
    {
      "request": {
        "url": "https://graph.microsoft.com/v1.0/me/photo",
        "method": "GET"
      },
      "response": {
        "statusCode": 404
      }
    }
  ]
}

Dukungan karakter pengganti

Dev Proxy mendukung penggunaan wildcard di properti URL. Anda dapat menggunakan karakter tanda bintang (*) untuk mencocokkan serangkaian karakter apa pun di URL.

Saat Anda menggunakan konfigurasi berikut, Dev Proxy merespons semua permintaan untuk mendapatkan profil pengguna dengan respons yang sama.

File: mocks.json

{
  "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v2.0.0/mockresponseplugin.mocksfile.schema.json",
  "mocks": [
    {
      "request": {
        "url": "https://graph.microsoft.com/v1.0/users/*"
      },
      "response": {
        "body": {
          "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#users/$entity",
          "businessPhones": ["+1 425 555 0109"],
          "displayName": "Adele Vance",
          "givenName": "Adele",
          "jobTitle": "Product Marketing Manager",
          "mail": "AdeleV@M365x214355.onmicrosoft.com",
          "mobilePhone": null,
          "officeLocation": "18/2111",
          "preferredLanguage": "en-US",
          "surname": "Vance",
          "userPrincipalName": "AdeleV@M365x214355.onmicrosoft.com",
          "id": "87d349ed-44d7-43e1-9a83-5f2406dee5bd"
        }
      }
    }
  ]
}

Saat Anda menggunakan konfigurasi berikut, Dev Proxy mengembalikan gambar yang sama dari disk saat Anda meminta untuk mendapatkan biner foto pengguna mana pun.

File: mocks.json

{
  "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v2.0.0/mockresponseplugin.mocksfile.schema.json",
  "mocks": [
    {
      "request": {
        "url": "https://graph.microsoft.com/v1.0/users/*/photo/$value"
      },
      "response": {
        "body": "@picture.jpg",
        "headers": [
          {
            "name": "content-type",
            "value": "image/jpeg"
          }
        ]
      }
    }
  ]
}

Saat Anda menggunakan konfigurasi berikut, Dev Proxy mengembalikan respons yang sama saat Anda meminta untuk mendapatkan profil pengguna saat ini dengan parameter string kueri apa pun.

File: mocks.json

{
  "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v2.0.0/mockresponseplugin.mocksfile.schema.json",
  "mocks": [
    {
      "request": {
        "url": "https://graph.microsoft.com/v1.0/me?*"
      },
      "response": {
        "body": {
          "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#users/$entity",
          "businessPhones": [
            "+1 412 555 0109"
          ],
          "displayName": "Megan Bowen",
          "givenName": "Megan",
          "jobTitle": "Auditor",
          "mail": "MeganB@M365x214355.onmicrosoft.com",
          "mobilePhone": null,
          "officeLocation": "12/1110",
          "preferredLanguage": "en-US",
          "surname": "Bowen",
          "userPrincipalName": "MeganB@M365x214355.onmicrosoft.com",
          "id": "48d31887-5fad-4d73-a9f5-3c356e68a038"
        }
      }
    }
  ]
}

Menanggapi dengan isi dari sebuah file

Untuk menjaga file tiruan Anda tetap bersih dan terorganisir, Anda dapat menyimpan konten respons dalam file terpisah dan mereferensikannya dalam file tiruan. Untuk menginstruksikan Dev Proxy, untuk memuat isi respons tiruan dari file, atur properti body ke @ diikuti oleh jalur file relatif terhadap file tiruan.

Misalnya, konfigurasi respons tiruan berikut, menginstruksikan Dev Proxy untuk menanggapi permintaan apa pun untuk https://graph.microsoft.com/v1.0/me dengan konten file response.json yang terletak di folder yang sama dengan file tiruan.

File: mocks.json

{
  "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v2.0.0/mockresponseplugin.mocksfile.schema.json",
  "mocks": [
    {
      "request": {
        "url": "https://graph.microsoft.com/v1.0/me",
        "method": "GET"
      },
      "response": {
        "body": "@response.json",
        "headers": [
          {
            "name": "content-type",
            "value": "application/json; odata.metadata=minimal"
          }
        ]
      }
    }
  ]
}

Menggunakan token @berfungsi dengan teks dan file biner .

Mengonfigurasi Dev Proxy untuk menggunakan respons tiruan

Setelah membuat file tiruan, Anda perlu mengonfigurasi Dev Proxy untuk menggunakan respons tiruan. Untuk mengonfigurasi Dev Proxy agar dapat memalsukan respons, tambahkan MockResponsePlugin ke daftar plugin dalam file devproxyrc .

File: devproxyrc.json

{
  "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v2.0.0/rc.schema.json",
  "plugins": [
    {
      "name": "MockResponsePlugin",
      "enabled": true,
      "pluginPath": "~appFolder/plugins/DevProxy.Plugins.dll",
      "configSection": "mockResponsePlugin"
    }
  ],
  "urlsToWatch": [
    "https://jsonplaceholder.typicode.com/*"
  ],
  "mockResponsePlugin": {
    "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v2.0.0/mockresponseplugin.schema.json",
    "mocksFile": "mocks.json"
  },
  "logLevel": "information",
  "newVersionNotification": "stable",
  "showSkipMessages": true
}

Pertama, Anda menambahkan MockResponsePlugin ke daftar plugin. Anda menyertakan referensi ke bagian konfigurasinya tempat Anda menentukan jalur ke file tiruan Anda.

Saat Anda memulai Dev Proxy, ia membaca file tiruan dan menggunakan respons tiruan untuk menanggapi permintaan yang cocok dengan tiruan yang ditentukan.

Dukungan untuk permintaan yang tidak diujicobakan

Dev Proxy mendukung menghasilkan kesalahan saat proxy mencegat permintaan yang tidak dimock. Kemampuan untuk menggagalkan permintaan yang tidak dimock berguna untuk mengidentifikasi permintaan yang terlewat dalam file tiruan Anda.

Untuk mengaktifkan fitur ini, tambahkan dan aktifkan pengaturan blockUnmockedRequests ke bagian konfigurasi MockResponsePlugin di file devproxyrc.

File: devproxyrc.json

{
  "mocksPlugin": {
    "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v2.0.0/mockresponseplugin.schema.json",
    "mocksFile": "mocks.json",
    "blockUnmockedRequests": true
  }
}

Saat Dev Proxy mencegat permintaan yang tidak dapat dipalsukan, Dev Proxy mengembalikan respons 502 Bad Gateway.

Langkah berikutnya

Pelajari selengkapnya tentang MockResponsePlugin.

Sampel

Lihat juga sampel Proksi Dev terkait:

Lihat juga