Restrições de importação de APIs e problemas conhecidos
APLICA-SE A: Todas as camadas de gerenciamento de API
Ao importar uma API, você pode encontrar algumas restrições ou precisar identificar e corrigir problemas antes de poder importar com êxito. Neste artigo, você aprenderá:
- Comportamento do Gerenciamento de API durante a importação do OpenAPI.
- Limitações de importação da OpenAPI e como funciona a exportação da OpenAPI.
- Requisitos e limitações para importação de WSDL e WADL.
Gerenciamento de API durante a importação de OpenAPI
Durante a importação do OpenAPI, a Gestão de API:
- Verifica especificamente os parâmetros da cadeia de consulta marcados como necessários.
- Por padrão, converte os parâmetros de cadeia de caracteres de consulta necessários em parâmetros de modelo necessários.
Se preferir que os parâmetros de consulta necessários na especificação sejam convertidos em parâmetros de consulta no Gerenciamento de API, desative a configuração Incluir parâmetros de consulta em modelos de operação ao criar a API no portal. Você também pode fazer isso usando APIs - Criar ou Atualizar API REST para definir a propriedade da translateRequiredQueryParameters
API como query
.
Para operações GET, HEAD e OPTIONS, o Gerenciamento de API descarta um parâmetro de corpo de solicitação se definido na especificação OpenAPI.
Limitações de importação do OpenAPI/Swagger
Se você receber erros ao importar seu documento OpenAPI, certifique-se de tê-lo validado previamente:
- Usando o designer no portal do Azure (Design > Front End > OpenAPI Specification Editor) ou
- Com uma ferramenta de terceiros, como o Swagger Editor.
Geral
Requisitos do modelo de URL
Requisito | Description |
---|---|
Nomes exclusivos para os parâmetros de caminho e consulta necessários | Em OpenAPI:
|
Parâmetro de URL definido | Deve fazer parte do modelo de URL. |
URL do ficheiro de origem disponível | Aplicado a URLs de servidor relativas. |
\$ref ponteiros |
Não é possível fazer referência a arquivos externos. |
Especificações OpenAPI
Versões suportadas
O Gerenciamento de API suporta apenas:
- OpenAPI versão 2.
- OpenAPI versão 3.0.x (até a versão 3.0.3).
- OpenAPI versão 3.1 (somente importação)
Limitações de tamanho
Limite de tamanho | Description |
---|---|
Até 4 MB | Quando uma especificação OpenAPI é importada em linha para o Gerenciamento de API. |
Tamanho da solicitação da API do Azure Resource Manager | Quando um documento OpenAPI é fornecido através de uma URL para um local acessível a partir do seu serviço de Gerenciamento de API. Consulte Limites de subscrição do Azure. |
Extensões suportadas
As únicas extensões suportadas são:
Extensão | Description |
---|---|
x-ms-paths |
|
x-servers |
Um backport do objeto OpenAPI 3 servers para OpenAPI 2. |
Extensões não suportadas
Extensão | Description |
---|---|
Recursion |
O Gerenciamento de API não suporta definições definidas recursivamente. Por exemplo, esquemas que se referem a si mesmos. |
Server objeto |
Não suportado no nível de operação da API. |
Produces palavra-chave |
Descreve os tipos MIME retornados por uma API. Não suportado. |
Extensões personalizadas
- São ignorados na importação.
- Não são guardados ou preservados para exportação.
Definições não suportadas
Não há suporte para definições de esquema embutido para operações de API. Definições de esquema:
- São definidos no escopo da API.
- Pode ser referenciado em escopos de solicitação ou resposta de operações de API.
Definições ignoradas
As definições de segurança são ignoradas.
Restrições de definição
Ao importar parâmetros de consulta, somente o método de serialização de matriz padrão (style: form
, explode: true
) é suportado. Para obter mais detalhes sobre parâmetros de consulta nas especificações OpenAPI, consulte a especificação de serialização.
Os parâmetros definidos nos cookies não são suportados. Você ainda pode usar a política para decodificar e validar o conteúdo dos cookies.
OpenAPI versão 2
O suporte à OpenAPI versão 2 é limitado apenas ao formato JSON.
Os parâmetros de tipo "Formulário" não são suportados. Você ainda pode usar a política para decodificar e validar application/x-www-form-urlencoded
cargas application/form-data
úteis.
OpenAPI versão 3.x
O Gerenciamento de API suporta as seguintes versões de especificação:
- OpenAPI 3.0.3
- OpenAPI 3.1.0 (somente importação)
HTTPS URLs
- Se vários
servers
forem especificados, o Gerenciamento de API usará a primeira URL HTTPS encontrada. - Se não houver URLs HTTPS, a URL do servidor estará vazia.
Suportado
example
Não suportado
Os seguintes campos estão incluídos no OpenAPI versão 3.0.x ou OpenAPI versão 3.1.x, mas não são suportados:
Object | Campo |
---|---|
OpenAPI | externalDocs |
Informação | summary |
Componentes |
|
PathItem |
|
Operação |
|
Parâmetro |
|
Mecanismos de importação, atualização e exportação OpenAPI
Geral
As definições de API exportadas de um serviço de Gerenciamento de API são:
- Destina-se principalmente a aplicativos externos que precisam chamar a API hospedada no serviço de Gerenciamento de API.
- Não se destina a ser importado para o mesmo ou diferente serviço de Gerenciamento de API.
Para obter o gerenciamento de configuração de definições de API em diferentes serviços/ambientes, consulte a documentação sobre o uso do serviço de Gerenciamento de API com o Git.
Adicionar nova API via importação OpenAPI
Para cada operação encontrada no documento OpenAPI, uma nova operação é criada com:
Nome do recurso do Azure definido como
operationId
.operationId
valor é normalizado.- Se
operationId
não for especificado (não presentenull
ou vazio), o valor do nome do recurso do Azure é gerado pela combinação do método HTTP e do modelo de caminho.- Por exemplo,
get-foo
.
- Por exemplo,
Nome para exibição definido como
summary
.summary
Valor:- Importado no estado em que se encontra.
- O comprimento é limitado a 300 caracteres.
- Se
summary
não for especificado (não presentenull
ou vazio), o valor do nome de exibição será definido comooperationId
.
Regras de normalização para operationId
- Converter em minúsculas.
- Substitua cada sequência de caracteres não alfanuméricos por um único traço.
- Por exemplo,
GET-/foo/{bar}?buzz={quix}
é transformado emget-foo-bar-buzz-quix-
.
- Por exemplo,
- Corte traços em ambos os lados.
- Por exemplo,
get-foo-bar-buzz-quix-
torna-seget-foo-bar-buzz-quix
- Por exemplo,
- Truncar para caber 76 caracteres, quatro caracteres a menos do que o limite máximo para um nome de recurso.
- Use os quatro caracteres restantes para um sufixo de eliminação de duplicação, se necessário, na forma de
-1, -2, ..., -999
.
Atualizar uma API existente através da importação OpenAPI
Durante a importação, a operação de API existente:
- Alterações para corresponder à API descrita no documento OpenAPI.
- Corresponde a uma operação no documento OpenAPI comparando seu
operationId
valor com o nome do recurso do Azure da operação existente.- Se uma correspondência for encontrada, as propriedades da operação existente serão atualizadas "in-loco".
- Se uma correspondência não for encontrada:
- Uma nova operação é criada combinando o método HTTP e o modelo de caminho, por exemplo,
get-foo
. - Para cada nova operação, a importação tentará copiar políticas de uma operação existente com o mesmo método HTTP e modelo de caminho.
- Uma nova operação é criada combinando o método HTTP e o modelo de caminho, por exemplo,
Todas as operações incomparáveis existentes são excluídas.
Para tornar a importação mais previsível, siga estas diretrizes:
- Especifique
operationId
a propriedade para cada operação. - Abster-se de mudar
operationId
após a importação inicial. - Nunca altere
operationId
o método HTTP ou o modelo de caminho ao mesmo tempo.
Regras de normalização para operationId
- Converter em minúsculas.
- Substitua cada sequência de caracteres não alfanuméricos por um único traço.
- Por exemplo,
GET-/foo/{bar}?buzz={quix}
é transformado emget-foo-bar-buzz-quix-
.
- Por exemplo,
- Corte traços em ambos os lados.
- Por exemplo,
get-foo-bar-buzz-quix-
torna-seget-foo-bar-buzz-quix
- Por exemplo,
- Truncar para caber 76 caracteres, quatro caracteres a menos do que o limite máximo para um nome de recurso.
- Use os quatro caracteres restantes para um sufixo de eliminação de duplicação, se necessário, na forma de
-1, -2, ..., -999
.
Exportar API como OpenAPI
Para cada operação, é:
- O nome do recurso do Azure é exportado como um
operationId
arquivo . - O nome de exibição é exportado como um
summary
arquivo .
Note-se que a normalização do operationId
é feita na importação, não na exportação.
WSDL
Você pode criar APIs SOAP pass-through e SOAP-to-REST com arquivos WSDL.
Ligações SOAP
- Somente ligações SOAP de estilo de codificação "documento" e "literal" são suportadas.
- Não há suporte para o estilo "rpc" ou codificação SOAP.
Importa e inclui
As
wsdl:import
diretivas ,xsd:import
exsd:include
não são suportadas. Em vez disso, mescle as dependências em um documento.Para obter uma ferramenta de código aberto para resolver e mesclar
wsdl:import
,xsd:import
exsd:include
dependências em um arquivo WSDL, consulte este repositório GitHub.
Especificações WS-*
Arquivos WSDL que incorporam especificações WS-* não são suportados.
Mensagens com várias partes
Este tipo de mensagem não é suportado.
WCF wsHttpBinding
- Os serviços SOAP criados com o Windows Communication Foundation devem usar
basicHttpBinding
o . wsHttpBinding
não é suportado.
MTOM
- Os serviços que utilizam
MTOM
podem funcionar. - O suporte oficial não é oferecido no momento.
Recursão
- Os tipos definidos recursivamente não são suportados pelo Gerenciamento de API.
- Por exemplo, refere-se a uma matriz de si mesmos.
Vários namespaces
Embora vários namespaces possam ser usados em um esquema, somente o namespace de destino pode ser usado para definir partes da mensagem. Esses namespaces são usados para definir outros elementos de entrada ou saída.
Namespaces diferentes do destino não são preservados na exportação. Embora você possa importar um documento WSDL definindo partes de mensagem com outros namespaces, todas as partes de mensagem terão o namespace de destino WSDL na exportação.
Vários parâmetros de avaliação
Os arquivos WSDL podem definir vários serviços e pontos de extremidade (portas) por um ou mais wsdl:service
wsdl:port
elementos. No entanto, o gateway de Gerenciamento de API é capaz de importar e fazer proxy de solicitações para apenas um único serviço e ponto de extremidade. Se vários serviços ou pontos de extremidade forem definidos no arquivo WSDL, identifique o nome do serviço de destino e o ponto de extremidade ao importar a API usando a propriedade wsdlSelector .
Gorjeta
Se você quiser balancear a carga de solicitações em vários serviços e pontos de extremidade, considere configurar um pool de back-end com balanceamento de carga.
Matrizes
A transformação SOAP-to-REST suporta apenas matrizes encapsuladas mostradas no exemplo abaixo:
<complexType name="arrayTypeName">
<sequence>
<element name="arrayElementValue" type="arrayElementType" minOccurs="0" maxOccurs="unbounded"/>
</sequence>
</complexType>
<complexType name="typeName">
<sequence>
<element name="element1" type="someTypeName" minOccurs="1" maxOccurs="1"/>
<element name="element2" type="someOtherTypeName" minOccurs="0" maxOccurs="1" nillable="true"/>
<element name="arrayElement" type="arrayTypeName" minOccurs="1" maxOccurs="1"/>
</sequence>
</complexType>
WADL
Atualmente, não há problemas conhecidos de importação de WADL.