Plugin Respons Tiruan

Mensimulasikan respons.

Cuplikan layar prompt perintah dengan respons simulasi Dev Proxy untuk permintaan ke GITHub API.

Contoh konfigurasi

{
  "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v4.0.0/rc.schema.json",
  "plugins": [
    {
      "name": "MockResponsePlugin",
      "enabled": true,
      "pluginPath": "~appFolder/plugins/DevProxy.Plugins.dll",
      "configSection": "mocksPlugin"
    }
  ],
  "mocksPlugin": {
    "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v4.0.0/mockresponseplugin.schema.json",
    "mocksFile": "mocks.json"
  }
}

Properti konfigurasi

Harta benda Deskripsi Bawaan
mocksFile Jalur ke file yang berisi respons tiruan mocks.json
blockUnmockedRequests Respons pengembalian 502 Bad Gateway untuk permintaan yang tidak ditiru false

Opsi Baris Perintah

Nama Deskripsi Bawaan
-n, --no-mocks Menonaktifkan pemuatan permintaan tiruan false
--mocks-file Jalur ke file yang berisi respons tiruan -

Contoh file tiruan

Tip

Untuk membuat file tiruan dari file dengan respons HTTP mentah, gunakan mocks from-http-responses perintah .

Berikut ini adalah contoh objek tiruan.

Merespons dengan isi

Respons terhadap permintaan dengan respons 200 OK dan isi JSON.

File: mocks.json

{
  "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v4.0.0/mockresponseplugin.mocksfile.schema.json",
  "mocks": [
    {
      "request": {
        "url": "https://graph.microsoft.com/v1.0/me",
        "method": "GET"
      },
      "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"
        },
        "headers": [
          {
            "name": "content-type",
            "value": "application/json; odata.metadata=minimal"
          }
        ]
      }
    }
  ]
}

Merespons dengan kesalahan

Tanggapi permintaan dengan respons 404 Tidak Ditemukan.

File: mocks.json

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

Merespons dengan data biner

Tanggapi permintaan dengan gambar biner yang dimuat dari file pada disk.

File: mocks.json

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

Merespons sesuai nth permintaan

Tanggapi hanya permintaan pencocokan kedua. Dev Proxy meneruskan permintaan lain ke API.

File: mocks.json

{
  "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v4.0.0/mockresponseplugin.mocksfile.schema.json",
  "mocks": [
    {
      "request": {
        "url": "https://graph.microsoft.com/v1.0/external/connections/*/operations/*",
        "method": "GET",
        "nth": 2
      },
      "response": {
        "statusCode": 200,
        "body": {
          "id": "1.neu.0278337E599FC8DBF5607ED12CF463E4.6410CCF8F6DB8758539FB58EB56BF8DC",
          "status": "completed",
          "error": null
        }
      }
    }
  ]
}

Merespons pencocokan isi permintaan

Tanggapi permintaan yang berisi string tertentu dalam isi.

File: mocks.json

{
  "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v4.0.0/mockresponseplugin.mocksfile.schema.json",
  "mocks": [
    {
      "request": {
        "url": "https://login.microsoftonline.com/fa15d692-e9c7-4460-a743-29f29522229/oauth2/v2.0/token",
        "method": "POST",
        "bodyFragment": "scope=https%3A%2F%2Fapi.contoso.com%2FDocuments.Read"
      },
      "response": {
        "headers": [
          {
            "name": "Content-Type",
            "value": "application/json; charset=utf-8"
          }
        ],
        "body": {
          "token_type": "Bearer",
          "expires_in": 3599,
          "ext_expires_in": 3599,
          "access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSU..."
        }
      }
    }
  ]
}

Mencerminkan data permintaan sebagai respons

Merespons dengan data yang mencerminkan nilai dari isi permintaan menggunakan @request.body.* tempat penampung.

File: mocks.json

{
  "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v4.0.0/mockresponseplugin.mocksfile.schema.json",
  "mocks": [
    {
      "request": {
        "url": "https://graph.microsoft.com/v1.0/users",
        "method": "POST"
      },
      "response": {
        "statusCode": 201,
        "body": {
          "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#users/$entity",
          "id": "12345678-1234-1234-1234-123456789abc",
          "businessPhones": "@request.body.businessPhones",
          "displayName": "@request.body.displayName",
          "givenName": "@request.body.givenName",
          "jobTitle": "@request.body.jobTitle",
          "mail": "@request.body.mail",
          "userPrincipalName": "@request.body.userPrincipalName",
          "accountEnabled": "@request.body.accountEnabled",
          "createdDateTime": "2024-01-15T10:30:00Z"
        },
        "headers": [
          {
            "name": "Content-Type",
            "value": "application/json; odata.metadata=minimal"
          },
          {
            "name": "Location",
            "value": "https://graph.microsoft.com/v1.0/users/12345678-1234-1234-1234-123456789abc"
          }
        ]
      }
    }
  ]
}

Mengingat permintaan berikut:

POST https://graph.microsoft.com/v1.0/users
Content-Type: application/json

{
  "displayName": "Megan Bowen",
  "userPrincipalName": "MeganB@M365x214355.onmicrosoft.com",
  "accountEnabled": true,
  "givenName": "Megan",
  "surname": "Bowen",
  "jobTitle": "Product Manager"
}

Responsnya adalah:

HTTP/1.1 200 Connection Established
Content-Length: 0

HTTP/1.1 201 Created
Cache-Control: no-store
x-ms-ags-diagnostic: 
Strict-Transport-Security: 
request-id: 12345678-1234-1234-1234-123456789abc
client-request-id: 12345678-1234-1234-1234-123456789abc
Date: 9/10/2025 10:28:35 AM
Content-Type: application/json; odata.metadata=minimal
Location: https://graph.microsoft.com/v1.0/users/12345678-1234-1234-1234-123456789abc
OData-Version: 4.0
Content-Length: 648

{
  "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#users/$entity",
  "id": "12345678-1234-1234-1234-123456789abc",
  "businessPhones": null,
  "displayName": "Megan Bowen",
  "givenName": "Megan",
  "jobTitle": "Product Manager",
  "mail": null,
  "mobilePhone": null,
  "officeLocation": null,
  "preferredLanguage": null,
  "surname": "Bowen",
  "userPrincipalName": "MeganB@M365x214355.onmicrosoft.com",
  "accountEnabled": true,
  "createdDateTime": "2024-01-15T10:30:00Z",
  "department": null,
  "companyName": null,
  "city": null,
  "country": null,
  "postalCode": null,
  "state": null,
  "streetAddress": null,
  "usageLocation": null
}

Properti file tiruan

Harta benda Deskripsi Diperlukan
request Objek permintaan yang menentukan permintaan untuk merespons Ya
response Objek respons yang menentukan respons untuk dikembalikan Ya

Objek permintaan

Setiap permintaan memiliki properti berikut:

Harta benda Deskripsi Diperlukan Nilai standar Nilai sampel
url URL absolut ke titik akhir API untuk merespons Ya https://jsonplaceholder.typicode.com/posts
method Kata kerja HTTP yang digunakan untuk mencocokkan permintaan dengan url Tidak GET GET
nth Menanggapi permintaan nth yang disadap yang cocok dengan tiruan method, , urldan bodyFragment Tidak 2
bodyFragment String yang harus ada di isi permintaan Tidak foo

Komentar

Gunakan tanda bintang (*) di url properti jika Anda ingin mencocokkan serangkaian karakter dalam URL. Misalnya, https://jsonplaceholder.typicode.com/* cocok dengan https://jsonplaceholder.typicode.com/posts dan https://jsonplaceholder.typicode.com/comments. Pada runtime, Dev Proxy mengonversi masing-masing * menjadi ekspresi .*reguler .

Dev Proxy mengabaikan kasus saat mencocokkan url properti dengan URL permintaan. Misalnya, tiruan untuk https://jsonplaceholder.typicode.com/Posts mencocokkan permintaan dengan https://jsonplaceholder.typicode.com/posts. Jika Anda menentukan beberapa tiruan untuk metode yang sama dengan URL yang hanya berbeda dalam casing, Dev Proxy menggunakan tiruan pencocokan pertama.

Saat menentukan tiruan, tempatkan tiruan yang paling spesifik terlebih dahulu. Misalnya, jika Anda memiliki dua tiruan, satu untuk https://jsonplaceholder.typicode.com/posts dan satu untuk https://jsonplaceholder.typicode.com/*, letakkan tiruan pertama terlebih dahulu. Jika tidak, Dev Proxy cocok dengan tiruan kedua terlebih dahulu dan mengembalikan respons untuk https://jsonplaceholder.typicode.com/* semua permintaan.

nth Gunakan properti jika Anda perlu mengirim respons yang berbeda ke URL permintaan yang sama. Misalnya, gunakan untuk mensimulasikan operasi yang berjalan lama. Saat pertama kali Anda memanggil API, api mengembalikan respons dengan pesan inprogress . Kedua kalinya Anda memanggil API, api mengembalikan respons dengan completed pesan. Proksi Dev menghitung setiap permintaan yang disadap yang cocok dengan tiruan method, , urldan bodyFragment, apakah itu mengembalikan respons tiruan untuk permintaan tersebut atau tidak. Anda tidak memerlukan tiruan fallback untuk URL yang sama: jika tidak ada tiruan yang berlaku untuk permintaan, Dev Proxy meneruskannya ke API. Untuk informasi selengkapnya tentang nth properti ini, lihat Permintaan mock nth.

bodyFragment Dengan menggunakan properti , Anda dapat mencocokkan permintaan berdasarkan konten isi. Misalnya, jika Anda ingin mencocokkan permintaan yang berisi foo string dalam isi, atur bodyFragment properti ke foo. Dev Proxy hanya menggunakan bodyFragment untuk permintaan selain GET.

Objek respons

Setiap respons memiliki properti berikut:

Harta benda Deskripsi Diperlukan Nilai standar Nilai sampel
body Isi untuk dikirim sebagai respons terhadap permintaan Tidak kosong { "foo": "bar" }
statusCode Kode status HTTP respons Tidak 200 404
headers Array header yang akan disertakan dalam respons Tidak kosong [{ name: "content-type", "value": "application/json" }]

Komentar

Jika Anda mengatur body properti ke objek atau array JSON, Dev Proxy menserialisasikannya ke JSON. Jika Anda mengaturnya ke string, Dev Proxy mengirimkan string as-is, tanpa tanda kutip di sekitarnya. Gunakan isi string untuk mengembalikan teks biasa, HTML, XML, atau konten non-JSON lainnya. Karena Proksi Dev default content-type header ke application/json, atur content-type juga header agar sesuai dengan konten Anda, misalnya text/plain.

Jika Anda ingin mengembalikan data biner, atur body properti ke nilai string yang dimulai dengan diikuti dengan @ jalur file relatif terhadap file tiruan. Misalnya, @picture.jpg mengembalikan gambar yang disimpan dalam picture.jpg file dalam direktori yang sama dengan file tiruan.

Untuk mencerminkan data permintaan dalam respons, gunakan @request.body.* tempat penampung di isi respons. Misalnya, @request.body.displayName mengembalikan nilai displayName properti dari isi permintaan. Fitur ini berfungsi dengan objek dan array berlapis, memungkinkan Anda membuat respons dinamis yang mencerminkan data permintaan masuk. Penggantian tempat penampung mendukung berbagai jenis nilai JSON termasuk string, angka, boolean, dan objek kompleks.

Langkah selanjutnya