Einschränkungen und bekannte Probleme beim Import von APIs
GILT FÜR: Alle API Management-Ebenen
Beim Importieren einer API stoßen Sie unter Umständen auf Einschränkungen oder Probleme, die behoben werden müssen, damit der Import erfolgreich ausgeführt werden kann. In diesem Artikel lernen Sie Folgendes:
- Verhalten von API Management während des OpenAPI-Imports
- OpenAPI-Importeinschränkungen und Funktionsweise des OpenAPI-Exports.
- Anforderungen und Einschränkungen für WSDL- und WADL-Importe.
API Management während des OpenAPI-Imports
Während des OpenAPI-Imports werden von API Management folgende Aktionen durchgeführt:
- Spezifische Suche nach Abfragezeichenfolgenparametern, die als erforderlich gekennzeichnet sind
- Konvertiert standardmäßig die erforderlichen Abfragezeichenfolgenparameter in erforderliche Vorlagenparameter.
Wenn Sie bevorzugen, dass erforderliche Abfrageparameter in der Spezifikation in Abfrageparameter in API Management übersetzt werden, deaktivieren Sie die Einstellung Abfrageparameter in Vorgangsvorlagen einschließen, wenn Sie die API im Portal erstellen. Sie können dies auch mithilfe der REST-API APIs – Erstellen oder Aktualisieren erreichen, um die translateRequiredQueryParameters
-Eigenschaft der API auf query
festzulegen.
Bei GET-, HEAD- und OPTIONS-Vorgängen verwerfen API Management einen Anforderungstextparameter, wenn in der OpenAPI-Spezifikation definiert.
Einschränkungen für den OpenAPI/Swagger-Import
Wenn Sie beim Importieren Ihres OpenAPI-Dokuments Fehlermeldungen erhalten, stellen Sie sicher, dass Sie das Dokument zuvor wie folgt überprüft haben:
- Mithilfe des Designers im Azure-Portal (Design > Front-End > OpenAPI-Spezifikations-Editor) oder
- Mit einem Drittanbietertool, z. B. Swagger-Editor
Allgemein
Anforderungen für URL-Vorlagen
Anforderung | BESCHREIBUNG |
---|---|
Eindeutige Namen für erforderliche Pfad- und Abfrageparameter | In OpenAPI:
|
Definierter URL-Parameter | Muss Teil der URL-Vorlage sein. |
Verfügbare Quelldatei-URL | Wird auf relative Server-URLs angewendet. |
\$ref -Zeiger |
Es können keine Verweise auf externe Dateien verwendet werden. |
OpenAPI-Spezifikationen
Unterstützte Versionen
Von API Management wird nur Folgendes unterstützt:
- OpenAPI-Version 2
- OpenAPI-Version 3.0.x (bis Version 3.0.3)
- OpenAPI-Version 3.1 (nur Importieren)
Größenbeschränkungen
Größenlimit | BESCHREIBUNG |
---|---|
Bis zu 4 MB | Gilt, wenn eine OpenAPI-Spezifikation inline in API Management importiert wird. |
Anforderungsgröße für Azure Resource Manager-API | Gilt, wenn ein OpenAPI-Dokument über eine URL eines Speicherorts bereitgestellt wird, auf den von Ihrem API Management-Dienst aus zugegriffen werden kann. Informationen hierzu finden Sie unter Einschränkungen für Azure-Abonnements. |
Unterstützte Erweiterungen
Die einzigen unterstützten Erweiterungen sind:
Durchwahl | BESCHREIBUNG |
---|---|
x-ms-paths |
|
x-servers |
Eine Zurückportierung des OpenAPI 3-Objekts servers für OpenAPI 2. |
Nicht unterstützte Erweiterungen
Durchwahl | BESCHREIBUNG |
---|---|
Recursion |
API Management unterstützt keine rekursiven Definitionen. Dies sind beispielsweise Schemas, die auf sich selbst verweisen. |
Objekt Server |
Wird auf API-Vorgangsebene nicht unterstützt. |
Produces Schlüsselwort |
Beschreibt von einer API zurückgegebene MIME-Typen. Wird nicht unterstützt. |
Benutzerdefinierte Erweiterungen
- Werden beim Importieren ignoriert
- Werden nicht gespeichert oder für den Export beibehalten
Nicht unterstützte Definitionen
Inlineschemadefinitionen für API-Vorgänge werden nicht unterstützt. Schemadefinitionen:
- Werden im API-Bereich definiert
- Können in Anforderungs- oder Antwortbereichen von API-Vorgängen referenziert werden
Ignorierte Definitionen
Sicherheitsdefinitionen werden ignoriert.
Definitionseinschränkungen
Beim Importieren von Abfrageparametern wird nur die Standardmethode für die Arrayserialisierung (style: form
, explode: true
) unterstützt. Weitere Informationen zu Abfrageparametern in OpenAPI-Spezifikationen finden Sie in der Serialisierungsspezifikation.
In Cookies definierte Parameter werden nicht unterstützt. Sie können die Richtlinie weiterhin verwenden, um den Inhalt von Cookies zu entschlüsseln und zu überprüfen.
OpenAPI, Version 2
Die Unterstützung von OpenAPI Version 2 ist auf das JSON-Format beschränkt.
Parameter vom Typ „Formular“ werden nicht unterstützt. Sie können die Richtlinie weiterhin verwenden, um Nutzlasten vom Typ application/x-www-form-urlencoded
und application/form-data
zu decodieren und zu überprüfen.
OpenAPI-Version 3.x
API Management unterstützt die folgenden Spezifikationsversionen:
- OpenAPI 3.0.3
- OpenAPI 3.1.0 (nur Importieren)
HTTPS-URLs
- Wenn viele
servers
angegeben sind, verwendet API Management die erste ermittelte HTTPS-URL. - Falls keine HTTPS-URLs vorhanden sind, ist die Server-URL leer.
Unterstützt
example
Nicht unterstützt
Die folgenden Felder sind entweder in OpenAPI-Version 3.0.x oder OpenAPI-Version 3.1.x enthalten, werden aber nicht unterstützt:
Object | Feld |
---|---|
OpenAPI | externalDocs |
Info | summary |
Komponenten |
|
PathItem |
|
Vorgang |
|
Parameter |
|
OpenAPI-Import-, Update- und Exportmechanismen
Allgemein
Für API-Definitionen, die aus einem API Management-Dienst exportiert werden, gilt Folgendes:
- Sie sind hauptsächlich für externe Anwendungen vorgesehen, die die im API Management-Dienst gehostete API aufrufen müssen.
- Sie sind nicht für einen Import in denselben oder einen anderen API Management-Dienst gedacht.
Informationen zur Konfigurationsverwaltung von API-Definitionen in verschiedenen Diensten/Umgebungen finden Sie in der Dokumentation zur Verwendung des API Management-Diensts mit Git.
Hinzufügen einer neuen API über OpenAPI-Import
Für jeden Vorgang im OpenAPI-Dokument wird ein neuer Vorgang mit folgenden Merkmalen erstellt:
Der Azure-Ressourcenname wird auf
operationId
festgelegt.- Der Wert von
operationId
wird normalisiert. - Wenn
operationId
nicht angegeben ist (nicht vorhanden,null
oder leer), wird der Wert des Azure-Ressourcennamens generiert, indem HTTP-Methode und Pfadvorlage kombiniert werden.- Beispiel:
get-foo
.
- Beispiel:
- Der Wert von
Der Anzeigename wird auf
summary
festgelegt.- Für den Wert
summary
gilt Folgendes:- Er wird unverändert importiert.
- Seine Länge ist auf 300 Zeichen beschränkt.
- Wenn
summary
nicht angegeben ist (nicht vorhanden,null
oder leer), wird der Wert des Anzeigenamens aufoperationId
festgelegt.
- Für den Wert
Normalisierungsregeln für operationId
- In Kleinschreibung konvertieren.
- Jede Sequenz aus nicht alphanumerischen Zeichen wird durch einen einzelnen Bindestrich ersetzt.
- Beispielsweise wird
GET-/foo/{bar}?buzz={quix}
inget-foo-bar-buzz-quix-
transformiert.
- Beispielsweise wird
- Bindestriche auf beiden Seiten werden gekürzt.
get-foo-bar-buzz-quix-
wird beispielsweise zuget-foo-bar-buzz-quix
.
- Kürzen Sie auf 76 Zeichen, vier Zeichen weniger als die Obergrenze für einen Ressourcennamen.
- Verwenden Sie ggf. die restlichen vier Zeichen für ein Deduplizierungssuffix in Form von
-1, -2, ..., -999
.
Aktualisieren einer vorhandenen API über den OpenAPI-Import
Während des Imports geschieht für den bestehenden API-Vorgang Folgendes:
- Er wird geändert, um der im OpenAPI-Dokument beschriebenen API zu entsprechen.
- Er wird einem Vorgang im OpenAPI-Dokument zugeordnet, indem sein
operationId
-Wert mit dem Azure-Ressourcennamen des vorhandenen Vorgangs verglichen wird.- Wenn eine Übereinstimmung gefunden wird, werden die Eigenschaften vorhandener Vorgänge „direkt“ aktualisiert.
- Wenn keine Übereinstimmung gefunden wird:
- Es wird ein neuer Vorgang erstellt, indem HTTP-Methode und Pfadvorlage kombiniert werden, z. B.
get-foo
. - Beim Import wird für jeden neuen Vorgang versucht, Richtlinien von einem vorhandenen Vorgang mit der gleichen HTTP-Methode und Pfadvorlage zu kopieren.
- Es wird ein neuer Vorgang erstellt, indem HTTP-Methode und Pfadvorlage kombiniert werden, z. B.
Alle vorhandenen nicht übereinstimmenden Vorgänge werden gelöscht.
Beachten Sie die folgenden Leitfäden, um den Import vorhersagbarer zu machen:
- Geben Sie die
operationId
-Eigenschaft für jeden Vorgang an. - Ändern Sie
operationId
nach dem ersten Import nicht mehr. - Ändern Sie
operationId
und HTTP-Methode oder Pfadvorlage niemals gleichzeitig.
Normalisierungsregeln für operationId
- In Kleinschreibung konvertieren.
- Jede Sequenz aus nicht alphanumerischen Zeichen wird durch einen einzelnen Bindestrich ersetzt.
- Beispielsweise wird
GET-/foo/{bar}?buzz={quix}
inget-foo-bar-buzz-quix-
transformiert.
- Beispielsweise wird
- Bindestriche auf beiden Seiten werden gekürzt.
get-foo-bar-buzz-quix-
wird beispielsweise zuget-foo-bar-buzz-quix
.
- Kürzen Sie auf 76 Zeichen, vier Zeichen weniger als die Obergrenze für einen Ressourcennamen.
- Verwenden Sie ggf. die restlichen vier Zeichen für ein Deduplizierungssuffix in Form von
-1, -2, ..., -999
.
Exportieren der API als OpenAPI
Für jeden Vorgang gilt:
- Der Name der Azure-Ressource wird als
operationId
exportiert. - Der Anzeigename wird als
summary
exportiert.
Beachten Sie, dass die Normalisierung von operationId
beim Import erfolgt, nicht beim Export.
WSDL
Sie können SOAP-Passthrough- und SOAP-to-REST-APIs mithilfe von WSDL-Dateien erstellen.
SOAP-Bindungen
- Es werden nur SOAP-Bindungen der Codierungsstile „document“ und „literal“ unterstützt.
- Der Stil „rpc“ und die SOAP-Codierung werden nicht unterstützt.
Imports und Includes
Die Direktiven
wsdl:import
,xsd:import
undxsd:include
werden nicht unterstützt. Führen Sie die Abhängigkeiten stattdessen in einem Dokument zusammen.Ein Open-Source-Tool zum Auflösen und Zusammenführen von
wsdl:import
-,xsd:import
- undxsd:include
-Abhängigkeiten in einer WSDL-Datei finden Sie in diesem GitHub-Repository.
WS-*-Spezifikationen
WSDL-Dateien, die WS-*-Spezifikationen enthalten, werden nicht unterstützt.
Mehrteilige Nachrichten
Dieser Nachrichtentyp wird nicht unterstützt.
WCF wsHttpBinding
- Für SOAP-Dienste, die mit Windows Communication Foundation erstellt wurden, sollte
basicHttpBinding
verwendet werden. wsHttpBinding
wird nicht unterstützt.
MTOM
- Dienste, die
MTOM
verwenden, können funktionieren. - Eine offizielle Unterstützung wird derzeit nicht angeboten.
Rekursion
- Rekursiv definierte Typen werden von API Management nicht unterstützt.
- Ein Beispiel ist ein Array, das auf sich selbst verweist.
Mehrere Namespaces
In einem Schema können zwar mehrere Namespaces verwendet werden, aber nur der Zielnamespace kann zum Definieren von Nachrichtenteilen verwendet werden. Diese Namespaces werden verwendet, um andere Ein- oder Ausgabeelemente zu definieren.
Andere Namespaces als der Zielnamespace werden beim Exportieren nicht beibehalten. Sie können zwar ein WSDL-Dokument importieren, das Nachrichtenteile mit anderen Namespaces definiert, beim Exportieren haben jedoch alle Nachrichtenteile den WSDL-Zielnamespace.
Mehrere Endpunkte
WSDL-Dateien können mehrere Dienste und Endpunkte (Ports) durch ein oder mehrere wsdl:service
- und wsdl:port
-Elemente definieren. Das API-Verwaltungsgateway kann jedoch nur einen einzelnen Dienst und Endpunkt importieren und Proxyanforderungen verwenden. Wenn mehrere Dienste oder Endpunkte in der WSDL-Datei definiert sind, identifizieren Sie den Zieldienstnamen und den Endpunkt beim Importieren der API mithilfe der wsdlSelector-Eigenschaft.
Tipp
Wenn Sie für Anforderungen über mehrere Dienste und Endpunkte hinweg einen Lastenausgleich durchführen möchten, sollten Sie einen Back-End-Pool mit Lastenausgleich konfigurieren.
Arrays
Bei der SOAP-to-REST-Transformation werden nur umschlossene Arrays unterstützt. Dies ist im Beispiel unten dargestellt:
<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
Derzeit sind keine Probleme beim Import im Format WADL bekannt.