Aracılığıyla paylaş


CrudApiEklentisi

Bellek içi veri deposuyla CRUD API'sini simüle eder. JSON yanıtları gönderir. İstemci tarafı uygulamalardan etki alanları arası kullanım için CORS'i destekler. İsteğe bağlı olarak, Microsoft Entra ile güvenliği sağlanan CRUD API'lerinin simülasyonunu oluşturur.

CRUD API'sini taklit eden Dev Proxy ile komut isteminin ekran görüntüsü.

Eklenti örneği tanımı

{
  "name": "CrudApiPlugin",
  "enabled": true,
  "pluginPath": "~appFolder/plugins/DevProxy.Plugins.dll",
  "configSection": "customersApi"
}

Yapılandırma örneği

{
  "customersApi": {
    "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v1.0.0/crudapiplugin.schema.json",
    "apiFile": "customers-api.json"
  }
}

Yapılandırma özellikleri

Mülk Açıklama
apiFile CRUD API'sinin tanımını içeren dosyanın yolu

Komut satırı seçenekleri

Hiç kimse

API dosyası örneği

Aşağıda müşteriler hakkında bilgi için CRUD API'sini tanımlayan API dosyalarına birkaç örnek verilmiştir.

Anonim CRUD API'si

Aşağıda müşteriler hakkında bilgi için anonim CRUD API'sini tanımlayan bir API dosyası örneği verilmiştir.

{
  "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v1.0.0/crudapiplugin.apifile.schema.json",
  "baseUrl": "https://api.contoso.com/v1/customers",
  "dataFile": "customers-data.json",
  "actions": [
    {
      "action": "getAll"
    },
    {
      "action": "getOne",
      "url": "/{customer-id}",
      "query": "$.[?(@.id == {customer-id})]"
    },
    {
      "action": "create"
    },
    {
      "action": "merge",
      "url": "/{customer-id}",
      "query": "$.[?(@.id == {customer-id})]"
    },
    {
      "action": "update",
      "url": "/{customer-id}",
      "query": "$.[?(@.id == {customer-id})]"
    },
    {
      "action": "delete",
      "url": "/{customer-id}",
      "query": "$.[?(@.id == {customer-id})]"
    }
  ]
}

Tek bir kapsam kullanılarak Microsoft Entra ile güvenliği sağlanan CRUD API

Aşağıda, Microsoft Entra ile güvenliği sağlanan müşteriler hakkında bilgi için CRUD API'sini tanımlayan bir API dosyası örneği verilmiştir. Tüm eylemlerin güvenliği tek bir kapsamla sağlanır. CrudApiPlugin belirteç hedef kitlesini, vereni ve kapsamı doğrular.

{
  "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v1.0.0/crudapiplugin.apifile.schema.json",
  "baseUrl": "https://api.contoso.com/v1/customers",
  "dataFile": "customers-data.json",
  "auth": "entra",
  "entraAuthConfig": {
    "audience": "https://api.contoso.com",
    "issuer": "https://login.microsoftonline.com/contoso.com",
    "scopes": ["api://contoso.com/user_impersonation"]
  },
  "actions": [
    {
      "action": "getAll"
    },
    {
      "action": "getOne",
      "url": "/{customer-id}",
      "query": "$.[?(@.id == {customer-id})]"
    },
    {
      "action": "create"
    },
    {
      "action": "merge",
      "url": "/{customer-id}",
      "query": "$.[?(@.id == {customer-id})]"
    },
    {
      "action": "update",
      "url": "/{customer-id}",
      "query": "$.[?(@.id == {customer-id})]"
    },
    {
      "action": "delete",
      "url": "/{customer-id}",
      "query": "$.[?(@.id == {customer-id})]"
    }
  ]
}

Belirli kapsamlar kullanılarak Microsoft Entra ile güvenliği sağlanan CRUD API

Aşağıda, Microsoft Entra ile güvenliği sağlanan müşteriler hakkında bilgi için CRUD API'sini tanımlayan bir API dosyası örneği verilmiştir. Eylemlerin güvenliği belirli kapsamlarla sağlanır. CrudApiPlugin belirteç hedef kitlesini, vereni ve kapsamı doğrular.

{
  "$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v1.0.0/crudapiplugin.apifile.schema.json",
  "baseUrl": "https://api.contoso.com/v1/customers",
  "dataFile": "customers-data.json",
  "auth": "entra",
  "entraAuthConfig": {
    "audience": "https://api.contoso.com",
    "issuer": "https://login.microsoftonline.com/contoso.com"
  },
  "actions": [
    {
      "action": "getAll",
      "auth": "entra",
      "entraAuthConfig": {
        "scopes": ["api://contoso.com/customer.read"]
      }
    },
    {
      "action": "getOne",
      "url": "/{customer-id}",
      "query": "$.[?(@.id == {customer-id})]",
      "auth": "entra",
      "entraAuthConfig": {
        "scopes": ["api://contoso.com/customer.read"]
      }
    },
    {
      "action": "create",
      "auth": "entra",
      "entraAuthConfig": {
        "scopes": ["api://contoso.com/customer.write"]
      }
    },
    {
      "action": "merge",
      "url": "/{customer-id}",
      "query": "$.[?(@.id == {customer-id})]",
      "auth": "entra",
      "entraAuthConfig": {
        "scopes": ["api://contoso.com/customer.write"]
      }
    },
    {
      "action": "update",
      "url": "/{customer-id}",
      "query": "$.[?(@.id == {customer-id})]",
      "auth": "entra",
      "entraAuthConfig": {
        "scopes": ["api://contoso.com/customer.write"]
      }
    },
    {
      "action": "delete",
      "url": "/{customer-id}",
      "query": "$.[?(@.id == {customer-id})]",
      "auth": "entra",
      "entraAuthConfig": {
        "scopes": ["api://contoso.com/customer.write"]
      }
    }
  ]
}

API dosyası özellikleri

Mülk Açıklama Gerekli
actions API'nin desteklediği eylemlerin listesi. Evet
auth API'nin güvenli olup olmadığını belirler. İzin verilen değerler: none, entra. Varsayılan none Hayır
baseUrl Geliştirme Proxy'sinin URL'yi kullanıma sunduğu temel URL. Dev Proxy, eylemlerde tanımladığınız URL'lere temel URL'yi ekler. Evet
dataFile API verilerini içeren dosyanın yolu. Evet
entraAuthConfig Microsoft Entra kimlik doğrulaması yapılandırması. Evet, authentra yapılandırdığınızda

Mutlak veya göreli bir yol kullanarak dataFile başvurabilirsiniz. Geliştirme Proxy'si, göreli yolları API tanım dosyasına göre çözümler.

dataFile bir JSON dizisi tanımlamalıdır. Dizi boş olabilir veya ilk bir nesne kümesi içerebilir.

EntraAuthConfig özellikleri

auth özelliğini entraolarak yapılandırırken entraAuthConfig özelliğini tanımlamanız gerekir. Tanımlamazsanız CrudApiPlugin bir uyarı gösterir ve API anonim olarak kullanılabilir.

API dosyasında ve her API eyleminde entraAuthConfig tanımlayabilirsiniz. API dosyasında tanımladığınızda, tüm eylemler için geçerlidir. Bir eylemde tanımladığınızda, bu özel eylem için API dosya yapılandırmasını geçersiz kılar.

entraAuthConfig özelliği aşağıdaki özelliklere sahiptir.

Mülk Açıklama Gerekli Temerrüt
audience Belirteç için geçerli hedef kitleyi belirtin. Belirtildiğinde, CrudApiPlugin belirteçten hedef kitleyi bu hedef kitleyle karşılaştırır. Farklıysa, CrudApiPlugin bir 401 Yetkisiz yanıt döndürür. Hayır Hiç kimse
issuer Geçerli belirteç vereni belirtin. Belirtildiğinde, CrudApiPlugin belirteçten vereni bu verenle karşılaştırır. Farklıysa, CrudApiPlugin bir 401 Yetkisiz yanıt döndürür. Hayır Hiç kimse
scopes Geçerli kapsam dizisini belirtin. Belirtildiğinde CrudApiPlugin, kapsamlardan birinin belirteçte mevcut olup olmadığını denetler. Kapsamlardan hiçbiri yoksa, CrudApiPlugin bir 401 Yetkisiz yanıt döndürür. Hayır Hiç kimse
roles Geçerli rol dizisini belirtin. Belirtildiğinde CrudApiPlugin, belirteçte rollerden birinin olup olmadığını denetler. Rollerden hiçbiri yoksa, CrudApiPlugin bir 401 Yetkisiz yanıt döndürür. Hayır Hiç kimse
validateLifetime Belirtecin süresinin dolmadığından emin olmak için CrudApiPlugin için true olarak ayarlayın. CrudApiPlugin süresi dolmuş bir belirteç algıladığında 401 Yetkisiz yanıt döndürür. Hayır false
validateSigningKey Belirtecin orijinal olup olmadığını doğrulamak için CrudApiPlugin için true olarak ayarlayın. CrudApiPlugin geçersiz imzaya sahip bir belirteç algıladığında (örneğin, belirteci el ile değiştirdiğiniz için), 401 Yetkisiz yanıt döndürür. Hayır false

Eylem özellikleri

actions listesindeki her eylem aşağıdaki özelliklere sahiptir.

Mülk Açıklama Gerekli Temerrüt
action Dev Proxy'nin verilerle nasıl etkileşime geçtiğini tanımlar. Olası değerler: getAll, getOne, getMany, create, merge, update, delete. Evet Hiç kimse
auth Eylemin güvenli olup olmadığını belirler. İzin verilen değerler: none, entra. Hayır none
entraAuthConfig Microsoft Entra kimlik doğrulaması yapılandırması. Evet, authentra yapılandırdığınızda Hiç kimse
method Dev Proxy'nin eylemi kullanıma açmak için kullandığı HTTP yöntemi. Hayır Eyleme bağlıdır
query Dev Proxy'nin veri dosyasındaki verileri bulmak için kullandığı Newtonsoft JSONPath sorgusu. Hayır Boş
url Geliştirme Proxy'sinin eylemi gösterdiği URL. Geliştirme Proxy'si URL'yi temel URL'ye ekler. Hayır Boş

url özelliğinde belirtilen URL parametreler içerebilir. Parametre adını küme ayraçlarında sarmalayarak parametreleri tanımlarsınız, örneğin {customer-id}. İsteği yönlendirirken, Dev Proxy parametresini istek URL'sinden gelen değerle değiştirir.

Sorguda aynı parametreyi kullanabilirsiniz. Örneğin, url/customers/{customer-id} ve query$.[?(@.id == {customer-id})]olarak tanımlarsanız, Geliştirme Proxy'si sorgudaki {customer-id} parametresini istek URL'sindeki değerle değiştirir.

Önemli

Dev Proxy, Newtonsoft.Json kullanarak query özelliğinde JSONPath uygular. Kullanımıyla ilgili bazı sınırlamalar vardır, örneğin, yalnızca tek tırnakları destekler. Sorun göndermeden önce sorgunuzu doğrulamayı unutmayın.

Eklenti sorguyu kullanarak veri dosyasındaki verileri bulamadıktan sonra 404 Not Found bir yanıt döndürür.

Her eylem türünün varsayılan bir HTTP yöntemi vardır. method özelliğini belirterek varsayılanı geçersiz kılabilirsiniz. Örneğin, get eylem türünün varsayılan GETyöntemi vardır. Bunun yerine POST kullanmak istiyorsanız, method özelliğini POSTolarak belirtin.

actions dizisi, alay etmek istediğiniz bir eylem koleksiyonu tanımlamıştı. Aynı HTTP yöntemi ve eylem türü için birden çok eylem tanımlayabilirsiniz. Örneğin, bir müşteriyi kimliğine göre, diğerini de e-posta adresine göre alan iki getOne eylemi tanımlayabilirsiniz. Her eylem için benzersiz URL'ler tanımladığınızdan emin olun.

Eylemler

Dev Proxy, CRUD API'leri için aşağıdaki eylemleri destekler.

Eylem Açıklama Varsayılan yöntem
getAll Veri dosyasındaki tüm öğeleri döndürür. GET
getOne Veri dosyasından tek bir öğe döndürür. Sorgu birden çok öğeyle eşleştiğinde başarısız olur. GET
getMany Veri dosyasından birden çok öğe döndürür. Sorgu hiçbir öğeyle eşleşmiyorsa boş bir dizi döndürür. GET
create Veri koleksiyonuna yeni bir öğe ekler. POST
merge İstekten alınan verileri veri dosyasındaki verilerle birleştirir. PATCH
update Veri dosyasındaki verileri istekteki verilerle değiştirir. PUT
delete Öğeyi veri dosyasından siler. DELETE

create eylemi kullanarak yeni bir öğe oluşturduğunuzda, eklenti şeklini doğrulamaz ve as-isveri toplamaya ekler.

Veri dosyası örneği

[
  {
    "id": 1,
    "name": "Contoso",
    "address": "4567 Main St Buffalo, NY 98052"
  },
  {
    "id": 2,
    "name": "Fabrikam",
    "address": "4567 Main St Buffalo, NY 98052"
  }
]

Sonraki adım