Compartilhar via


CrudApiPlugin

Simula uma API CRUD com um armazenamento de dados na memória. Envia respostas JSON. Dá suporte ao CORS para uso entre domínios de aplicativos do lado do cliente. Opcionalmente, simula APIs CRUD protegidas com Microsoft Entra.

Captura de tela de um prompt de comando com o Proxy de Desenvolvimento simulando uma API CRUD.

Definição da instância do plug-in

{
  "name": "CrudApiPlugin",
  "enabled": true,
  "pluginPath": "~appFolder/plugins/dev-proxy-plugins.dll",
  "configSection": "customersApi"
}

Exemplo de configuração

{
  "customersApi": {
    "apiFile": "customers-api.json"
  }
}

Propriedades de configuração

Propriedade Descrição
apiFile Caminho para o arquivo que contém a definição da API CRUD

Opções de linha de comando

Nenhum

Exemplo de arquivo de API

A seguir estão vários exemplos de arquivos de API que definem uma API CRUD para obter informações sobre clientes.

API CRUD anônima

Veja a seguir um exemplo de um arquivo de API que define uma API CRUD anônima para obter informações sobre clientes.

{
  "$schema": "https://raw.githubusercontent.com/microsoft/dev-proxy/main/schemas/v0.14.1/crudapiplugin.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})]"
    }
  ]
}

API CRUD protegida com Microsoft Entra usando um único escopo

Veja a seguir um exemplo de um arquivo de API que define uma API CRUD para obter informações sobre clientes protegidos com Microsoft Entra. Todas as ações são protegidas com um escopo. CrudApiPlugin valida o público do token, o emissor e o escopo.

{
  "$schema": "https://raw.githubusercontent.com/microsoft/dev-proxy/main/schemas/v0.14.1/crudapiplugin.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})]"
    }
  ]
}

API CRUD protegida com Microsoft Entra usando escopos específicos

Veja a seguir um exemplo de um arquivo de API que define uma API CRUD para obter informações sobre clientes protegidos com Microsoft Entra. As ações são protegidas com escopos específicos. CrudApiPlugin valida o público do token, o emissor e o escopo.

{
  "$schema": "https://raw.githubusercontent.com/microsoft/dev-proxy/main/schemas/v0.14.1/crudapiplugin.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"]
      }
    }
  ]
}

Propriedades do arquivo de API

Propriedade Descrição Obrigatório
actions Lista de ações compatíveis com a API. Yes
auth Determina se a API está protegida ou não. Valores Permitidos: none e entra. Padrão none No
baseUrl URL base em que o Proxy de Desenvolvimento expõe a URL. O Proxy de Desenvolvimento anexa a URL base às URLs definidas em ações. Yes
dataFile Caminho para o arquivo que contém os dados da API. Yes
entraAuthConfig Configuração para autenticação Microsoft Entra. Sim, quando você configura auth para entra

Você pode se referir ao dataFile usando um caminho absoluto ou relativo. O Proxy de Desenvolvimento resolve caminhos relativos relativamente ao arquivo de definição de API.

O dataFile deve definir uma matriz JSON. A matriz pode estar vazia ou pode conter um conjunto inicial de objetos.

Propriedades entraAuthConfig

Ao configurar a auth propriedade para entra, você deve definir a entraAuthConfig propriedade . Se você não defini-lo, CrudApiPlugin mostrará um aviso e a API estará disponível anonimamente.

Você pode definir entraAuthConfig no arquivo de API e em cada ação de API. Quando você o define no arquivo de API, ele se aplica a todas as ações. Quando você o define em uma ação, ela substitui a configuração de arquivo de API para essa ação específica.

A entraAuthConfig propriedade tem as propriedades a seguir.

Propriedade Descrição Obrigatório Padrão
audience Especifique o público-alvo válido para o token. Quando especificado, CrudApiPlugin compara o público-alvo do token com esse público-alvo. Se forem diferentes, CrudApiPlugin retornará uma resposta 401 Não autorizada. Não Nenhum
issuer Especifique o emissor de token válido. Quando especificado, CrudApiPlugin compara o emissor do token com esse emissor. Se forem diferentes, CrudApiPlugin retornará uma resposta 401 Não autorizada. Não Nenhum
scopes Especifique a matriz de escopos válidos. Quando especificado, CrudApiPlugin controla se um dos escopos está presente no token. Se nenhum dos escopos estiver presente, CrudApiPlugin retornará uma resposta 401 Não autorizada. Não Nenhum
roles Especifique a matriz de funções válidas. Quando especificado, CrudApiPlugin controla se uma das funções está presente no token. Se nenhuma das funções estiver presente, CrudApiPlugin retornará uma resposta 401 Não autorizada. Não Nenhum
validateLifetime Defina como true para o CrudApiPlugin para validar se o token não expirou. Quando CrudApiPlugin detecta um token expirado, ele retorna uma resposta 401 Não autorizada. No false
validateSigningKey Defina como true para o CrudApiPlugin para validar se o token é autêntico. Quando CrudApiPlugin detecta um token com uma assinatura inválida (por exemplo, porque você modificou o token manualmente), ele retorna uma resposta 401 Não autorizada. No false

Propriedades da ação

Cada ação na actions lista tem as propriedades a seguir.

Propriedade Descrição Obrigatório Padrão
action Define como o Proxy de Desenvolvimento interage com os dados. Valores possíveis: getAll, getOne, , getMany, create, merge, update, delete. Sim Nenhum
auth Determina se a ação está protegida ou não. Valores Permitidos: none e entra. No none
entraAuthConfig Configuração para autenticação Microsoft Entra. Sim, quando você configura auth para entra Nenhum
method Método HTTP que o Proxy de Desenvolvimento usa para expor a ação. No Depende da ação
query Consulta Newtonsoft JSONPath que o Proxy de Desenvolvimento usa para localizar os dados no arquivo de dados. No Vazio
url URL na qual o Proxy de Desenvolvimento expõe a ação. O Proxy de Desenvolvimento acrescenta a URL à URL base. No Vazio

A URL especificada na url propriedade pode conter parâmetros. Você define parâmetros encapsulando o nome do parâmetro em chaves, por exemplo, {customer-id}. Ao rotear a solicitação, o Proxy de Desenvolvimento substitui o parâmetro pelo valor da URL de solicitação.

Você pode usar o mesmo parâmetro na consulta. Por exemplo, se você definir o url como e o query como $.[?(@.id == {customer-id})]/customers/{customer-id} , o Proxy de Desenvolvimento substituirá o {customer-id} parâmetro na consulta pelo valor da URL de solicitação.

Importante

O Proxy de Desenvolvimento implementa o query JSONPath na propriedade usando Newtonsoft.Json. Há algumas limitações para usá-lo, como, ele dá suporte apenas a aspas simples. Antes de enviar um problema, certifique-se de validar sua consulta.

Quando o plug-in não consegue encontrar os dados no arquivo de dados usando a consulta, ele retorna uma 404 Not Found resposta.

Cada tipo de ação tem um método HTTP padrão. Você pode substituir o padrão especificando a method propriedade . Por exemplo, o get tipo de ação tem um método padrão de GET. Se você quiser usar POST , especifique a method propriedade como POST.

A actions matriz definiu uma coleção de ações que você deseja simular. Você pode definir várias ações para o mesmo método HTTP e tipo de ação. Por exemplo, você pode definir duas getOne ações, uma que recupera um cliente por sua ID e a outra pelo endereço de email. Certifique-se de definir URLs exclusivas para cada ação.

Ações

O Proxy de Desenvolvimento dá suporte às seguintes ações para APIs CRUD.

Ação Descrição Método Default
getAll Retorna todos os itens do arquivo de dados. GET
getOne Retorna um único item do arquivo de dados. Falha quando a consulta corresponde a vários itens. GET
getMany Retorna vários itens do arquivo de dados. Retornará uma matriz vazia se a consulta não corresponder a nenhum item. GET
create Adiciona um novo item à coleção de dados. POST
merge Mescla os dados da solicitação com os dados do arquivo de dados. PATCH
update Substitui os dados no arquivo de dados pelos dados da solicitação. PUT
delete Exclui o item do arquivo de dados. DELETE

Quando você cria um novo item usando uma create ação, o plug-in não valida sua forma e o adiciona à coleta de dados como está.

Exemplo de arquivo de dados

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