Menyimulasikan pembatasan pada API Microsoft 365

Sekilas
Tujuan: Menguji cara aplikasi Anda menangani pembatasan API Microsoft 365
Waktu: 10 menit
Plugins:GraphRandomErrorPlugin, RetryAfterPlugin
Prasyarat:Menyiapkan Proksi Dev

Biasanya, pengujian pembatasan penggunaan sulit dilakukan karena jarang terjadi, yaitu ketika server Microsoft 365 berada di bawah beban berat. Dengan menggunakan Dev Proxy, Anda dapat mensimulasikan pengurangan kecepatan respons, dan memeriksa apakah aplikasi Anda menanganinya dengan benar.

Untuk mensimulasikan pembatasan pada API Microsoft 365, gunakan GraphRandomErrorPlugin dan RetryAfterPlugin. API Microsoft 365 mengembalikan GraphRandomErrorPlugin respons pembatasan. Memverifikasi RetryAfterPlugin bahwa aplikasi Anda mundur seperti yang diinstruksikan oleh API.

Untuk memulai, aktifkan GraphRandomErrorPlugin dan RetryAfterPlugin di file konfigurasi Proksi Dev Anda.

File:devproxyrc.json

{
  "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v3.3.1/rc.schema.json",
  "plugins": [
    {
      "name": "RetryAfterPlugin",
      "enabled": true,
      "pluginPath": "~appFolder/plugins/DevProxy.Plugins.dll"
    },
    {
      "name": "GraphRandomErrorPlugin",
      "enabled": true,
      "pluginPath": "~appFolder/plugins/DevProxy.Plugins.dll",
      "configSection": "graphRandomErrorPlugin"
    }
  ],
  "urlsToWatch": [
    "https://graph.microsoft.com/v1.0/*",
    "https://graph.microsoft.com/beta/*",
    "https://graph.microsoft.us/v1.0/*",
    "https://graph.microsoft.us/beta/*",
    "https://dod-graph.microsoft.us/v1.0/*",
    "https://dod-graph.microsoft.us/beta/*",
    "https://microsoftgraph.chinacloudapi.cn/v1.0/*",
    "https://microsoftgraph.chinacloudapi.cn/beta/*",
    "!https://*.sharepoint.*/*_api/web/GetClientSideComponents",
    "https://*.sharepoint.*/*_api/*",
    "https://*.sharepoint.*/*_vti_bin/*",
    "https://*.sharepoint-df.*/*_api/*",
    "https://*.sharepoint-df.*/*_vti_bin/*"
  ]
}

Perhatian

RetryAfterPlugin Tambahkan sebelum GraphRandomErrorPlugin dalam file konfigurasi Anda. Jika Anda menambahkannya setelahnya, permintaan akan gagal oleh GraphRandomErrorPlugin sebelum RetryAfterPlugin memiliki kesempatan untuk menanganinya.

Selanjutnya, konfigurasikan GraphRandomErrorPlugin untuk menyimulasikan kesalahan pembatasan kecepatan.

File:devproxyrc.json (konfigurasi lengkap)

{
  "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v3.3.1/rc.schema.json",
  "plugins": [
    {
      "name": "RetryAfterPlugin",
      "enabled": true,
      "pluginPath": "~appFolder/plugins/DevProxy.Plugins.dll"
    },
    {
      "name": "GraphRandomErrorPlugin",
      "enabled": true,
      "pluginPath": "~appFolder/plugins/DevProxy.Plugins.dll",
      "configSection": "graphRandomErrorPlugin"
    }
  ],
  "urlsToWatch": [
    "https://graph.microsoft.com/v1.0/*",
    "https://graph.microsoft.com/beta/*",
    "https://graph.microsoft.us/v1.0/*",
    "https://graph.microsoft.us/beta/*",
    "https://dod-graph.microsoft.us/v1.0/*",
    "https://dod-graph.microsoft.us/beta/*",
    "https://microsoftgraph.chinacloudapi.cn/v1.0/*",
    "https://microsoftgraph.chinacloudapi.cn/beta/*",
    "!https://*.sharepoint.*/*_api/web/GetClientSideComponents",
    "https://*.sharepoint.*/*_api/*",
    "https://*.sharepoint.*/*_vti_bin/*",
    "https://*.sharepoint-df.*/*_api/*",
    "https://*.sharepoint-df.*/*_vti_bin/*"
  ],
  "graphRandomErrorPlugin": {
    "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v3.3.1/graphrandomerrorplugin.schema.json",
    "allowedErrors": [ 429 ]
  }
}

Mulai Dev Proxy dengan file konfigurasi Anda dan uji aplikasi Anda untuk melihat caranya menangani pembatasan.

Jika aplikasi Anda mundur saat dibatasi, tetapi tidak menunggu jumlah waktu yang ditentukan dalam permintaan, Anda akan melihat pesan yang mirip dengan Calling https://graph.microsoft.com/v1.0/endpoint again before waiting for the Retry-After period. Request will be throttled.

Pesan ini menunjukkan bahwa aplikasi Anda tidak menangani pembatasan dengan benar dan memperpanjang pembatasan secara tidak perlu. Untuk meningkatkan cara aplikasi Anda menangani pembatasan, perbarui kode Anda untuk menunggu jumlah waktu yang ditentukan di Retry-After header sebelum mencoba kembali permintaan.

Lihat juga