Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Simula uma API CRUD com um armazenamento de dados na memória. Envia respostas JSON. Suporta CORS para uso entre domínios a partir de aplicativos do lado do cliente. Opcionalmente, simula APIs CRUD protegidas com o Microsoft Entra.
Definição de instância de plug-in
{
"name": "CrudApiPlugin",
"enabled": true,
"pluginPath": "~appFolder/plugins/DevProxy.Plugins.dll",
"configSection": "customersApi"
}
Exemplo de configuração
{
"customersApi": {
"$schema": "https://raw.githubusercontent.com/dotnet/dev-proxy/main/schemas/v1.0.0/crudapiplugin.schema.json",
"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 API
A seguir estão vários exemplos de arquivos de API que definem uma API CRUD para obter informações sobre os clientes.
API CRUD anônima
A seguir está 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/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})]"
}
]
}
API CRUD protegida com o Microsoft Entra usando um único escopo
A seguir está um exemplo de um arquivo de API que define uma API CRUD para obter informações sobre clientes protegidos com o 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/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})]"
}
]
}
API CRUD protegida com o Microsoft Entra usando escopos específicos
A seguir está um exemplo de um arquivo de API que define uma API CRUD para obter informações sobre clientes protegidos com o 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/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"]
}
}
]
}
Propriedades do arquivo API
| Propriedade | Descrição | Necessário |
|---|---|---|
actions |
Lista de ações suportadas pela API. | Sim |
auth |
Determina se a API é protegida ou não. Valores permitidos: none, entra. Padrão none |
Não |
baseUrl |
URL base onde o Dev Proxy expõe a URL. O Dev Proxy precede a URL base para URLs que você define em ações. | Sim |
dataFile |
Caminho para o arquivo que contém os dados para a API. | Sim |
entraAuthConfig |
Configuração para autenticação do Microsoft Entra. | Sim, quando você configura o auth para entra |
Você pode fazer referência ao dataFile usando um caminho absoluto ou relativo. O Dev Proxy resolve caminhos relativos relativos 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 propriedade auth para entra, você deve definir a propriedade entraAuthConfig. Se você não defini-lo, CrudApiPlugin mostra um aviso e a API está disponível anonimamente.
Você pode definir entraAuthConfig no arquivo da API e em cada ação da API. Quando você o define no arquivo de API, ele se aplica a todas as ações. Quando você a define em uma ação, ela substitui a configuração do arquivo de API para essa ação específica.
A propriedade entraAuthConfig tem as seguintes propriedades.
| Propriedade | Descrição | Necessário | Inadimplência |
|---|---|---|---|
audience |
Especifique o público válido para o token. Quando especificado, CrudApiPlugin compara o público do token com esse público. Se eles forem diferentes, CrudApiPlugin retorna 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 este emissor. Se eles forem diferentes, CrudApiPlugin retorna uma resposta 401 não autorizada. | Não | Nenhum |
scopes |
Especifique a matriz de escopos válidos. Quando especificado, CrudApiPlugin controla se qualquer 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 qualquer 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 validar se o token não expirou. Quando CrudApiPlugin deteta um token expirado, ele retorna uma resposta 401 não autorizada. |
Não | false |
validateSigningKey |
Defina como true para o CrudApiPlugin validar se o token é autêntico. Quando CrudApiPlugin deteta um token com uma assinatura inválida (por exemplo, porque você modificou o token manualmente), ele retorna uma resposta 401 Não autorizada. |
Não | false |
Propriedades da ação
Cada ação na lista actions tem as seguintes propriedades.
| Propriedade | Descrição | Necessário | Inadimplência |
|---|---|---|---|
action |
Define como o Dev Proxy interage com os dados. Valores possíveis: getAll, getOne, getMany, create, merge, update, delete. |
Sim | Nenhum |
auth |
Determina se a ação é segura ou não. Valores permitidos: none, entra. |
Não | none |
entraAuthConfig |
Configuração para autenticação do Microsoft Entra. | Sim, quando você configura o auth para entra |
Nenhum |
method |
Método HTTP que o Dev Proxy usa para expor a ação. | Não | Depende da ação |
query |
Newtonsoft JSONPath consulta que o Dev Proxy usa para localizar os dados no arquivo de dados. | Não | Vazio |
url |
URL onde o Dev Proxy expõe a ação. O Dev Proxy acrescenta a URL à URL base. | Não | Vazio |
A URL especificada na propriedade url pode conter parâmetros. Você define parâmetros encapsulando o nome do parâmetro em chaves encaracoladas, por exemplo, {customer-id}. Ao rotear a solicitação, o Dev Proxy substitui o parâmetro pelo valor da URL da solicitação.
Você pode usar o mesmo parâmetro na consulta. Por exemplo, se você definir o url como /customers/{customer-id} e o query como $.[?(@.id == {customer-id})], o Dev Proxy substituirá o parâmetro {customer-id} na consulta pelo valor da URL da solicitação.
Importante
Dev Proxy implementa JSONPath na propriedade query usando Newtonsoft.Json. Existem algumas limitações para usá-lo, tais como, ele suporta apenas aspas únicas. Antes de submeter um problema, certifique-se de que valida a sua consulta.
Quando o plug-in não consegue encontrar os dados no arquivo de dados usando a consulta, ele retorna uma resposta 404 Not Found.
Cada tipo de ação tem um método HTTP padrão. Você pode substituir o padrão especificando a propriedade method. Por exemplo, o tipo de ação get tem um método padrão de GET. Se você quiser usar POST em vez disso, especifique a propriedade method como POST.
A matriz actions 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 ações getOne, uma que recupera um cliente por seu ID e outra por seu endereço de e-mail. Certifique-se de definir URLs exclusivos para cada ação.
Ações
O Dev Proxy suporta as seguintes ações para APIs CRUD.
| Ação | Descrição | Método padrão |
|---|---|---|
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. Retorna uma matriz vazia se a consulta não corresponder a nenhum item. | GET |
create |
Adiciona um novo item à coleta 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 ação create, o plug-in não valida sua forma e o adiciona à coleta de dados as-is.
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"
}
]