API içeri aktarma kısıtlamaları ve bilinen sorunlar
UYGULANANLAR: Tüm API Management katmanları
BIR API'yi içeri aktarırken bazı kısıtlamalarla karşılaşabilir veya başarıyla içeri aktarabilmek için önce sorunları tanımlamanız ve düzeltmeniz gerekebilir. Bu makalede şunları öğreneceksiniz:
- API Management'ın OpenAPI içeri aktarma sırasındaki davranışı.
- OpenAPI içeri aktarma sınırlamaları ve OpenAPI dışarı aktarmanın çalışma şekli.
- WSDL ve WADL içeri aktarma gereksinimleri ve sınırlamaları.
OpenAPI içeri aktarma sırasında API Management
OpenAPI içeri aktarma sırasında API Management:
- Özellikle, gerekli olarak işaretlenmiş sorgu dizesi parametrelerini denetler.
- Varsayılan olarak, gerekli sorgu dizesi parametrelerini gerekli şablon parametrelerine dönüştürür.
Belirtimdeki gerekli sorgu parametrelerinin API Management'taki sorgu parametrelerine çevrilmesi tercih ediyorsanız, portalda API'yi oluştururken sorgu parametrelerini işlem şablonlarına ekle ayarını devre dışı bırakın. Api'nin translateRequiredQueryParameters
özelliğini query
olarak ayarlamak için API'leri - REST API'sini Oluştur veya Güncelleştir'i kullanarak da bunu gerçekleştirebilirsiniz.
GET, HEAD ve OPTIONS işlemleri için API Management, OpenAPI belirtiminde tanımlanmışsa bir istek gövdesi parametresi atar.
OpenAPI/Swagger içeri aktarma sınırlamaları
OpenAPI belgenizi içeri aktarırken hata alıyorsanız, aşağıdakilerden birini yaparak belgeyi önceden doğruladığınızdan emin olun:
- Tasarımcıyı Azure portalında kullanma (Tasarım > Ön Ucu > OpenAPI Belirtimi Düzenleyicisi) veya
- Swagger Editor gibi bir üçüncü taraf aracıyla.
Genel
URL şablonu gereksinimleri
Gereksinim | Açıklama |
---|---|
Gerekli yol ve sorgu parametreleri için benzersiz adlar | OpenAPI'de:
|
Tanımlı URL parametresi | URL şablonunun bir parçası olmalıdır. |
Kullanılabilir kaynak dosya URL'si | Göreli sunucu URL'lerine uygulanır. |
\$ref Işaretçi |
Dış dosyalara başvurulamıyor. |
OpenAPI belirtimleri
Desteklenen sürümler
API Management yalnızca şunları destekler:
- OpenAPI sürüm 2.
- OpenAPI sürüm 3.0.x (sürüm 3.0.3'e kadar).
- OpenAPI sürüm 3.1 (yalnızca içeri aktarma)
Boyut sınırlamaları
Boyut sınırı | Açıklama |
---|---|
4 MB'a kadar | OpenAPI belirtimi, API Management'a satır içi olarak içeri aktarıldığında. |
Azure Resource Manager API istek boyutu | Bir OpenAPI belgesi, API Management hizmetinizden erişilebilen bir konumun URL'si aracılığıyla sağlandığında. Bkz. Azure abonelik sınırları. |
Desteklenen uzantılar
Desteklenen tek uzantılar şunlardır:
Dahili | Açıklama |
---|---|
x-ms-paths |
|
x-servers |
OpenAPI 2 için OpenAPI 3 servers nesnesinin arka penceresi. |
Desteklenmeyen uzantılar
Dahili | Açıklama |
---|---|
Recursion |
API Management özyinelemeli olarak tanımlanan tanımları desteklemez. Örneğin, kendilerine başvuran şemalar. |
Server nesne |
API işlem düzeyinde desteklenmez. |
Produces anahtar sözcük |
API tarafından döndürülen MIME türlerini açıklar. Desteklenmiyor. |
Özel uzatmalar
- İçeri aktarmada yoksayılır.
- Dışarı aktarma için kaydedilmez veya korunmaz.
Desteklenmeyen tanımlar
API işlemleri için satır içi şema tanımları desteklenmez. Şema tanımları:
- API kapsamında tanımlanır.
- API işlemleri isteğinde veya yanıt kapsamlarında başvurulabilir.
Yoksayılan tanımlar
Güvenlik tanımları yoksayılır.
Tanım kısıtlamaları
Sorgu parametreleri içeri aktarılırken yalnızca varsayılan dizi serileştirme yöntemi (style: form
, explode: true
) desteklenir. OpenAPI belirtimlerindeki sorgu parametreleri hakkında daha fazla bilgi için serileştirme belirtimine bakın.
Tanımlama bilgilerinde tanımlanan parametreler desteklenmez. Tanımlama bilgilerinin içeriğini çözmek ve doğrulamak için ilkeyi kullanmaya devam edebilirsiniz.
OpenAPI sürüm 2
OpenAPI sürüm 2 desteği yalnızca JSON biçimiyle sınırlıdır.
"Form" türü parametreleri desteklenmez. Kodu çözmek, doğrulamak ve yükleri doğrulamak application/x-www-form-urlencoded
application/form-data
için ilkeyi kullanmaya devam edebilirsiniz.
OpenAPI sürüm 3.x
API Management aşağıdaki belirtim sürümlerini destekler:
- OpenAPI 3.0.3
- OpenAPI 3.1.0 (yalnızca içeri aktarma)
HTTPS URL'leri
- Birden çok
servers
belirtilirse, API Management bulduğu ilk HTTPS URL'sini kullanır. - HERHANGI bir HTTPS URL'si yoksa, sunucu URL'si boş olur.
Desteklenir
example
Desteklenmeyen
Aşağıdaki alanlar OpenAPI sürüm 3.0.x veya OpenAPI sürüm 3.1.x'e eklenmiştir, ancak desteklenmez:
Object | Alan |
---|---|
OpenAPI | externalDocs |
Bilgi | summary |
Bileşenler |
|
PathItem |
|
İşlem |
|
Parametre |
|
OpenAPI içeri aktarma, güncelleştirme ve dışarı aktarma mekanizmaları
Genel
API Management hizmetinden dışarı aktarılan API tanımları şunlardır:
- Öncelikli olarak API Management hizmetinde barındırılan API'yi çağırması gereken dış uygulamalara yöneliktir.
- Aynı veya farklı API Management hizmetine içeri aktarılması amaçlanmamıştır.
Api tanımlarının farklı hizmetler/ortamlar arasında yapılandırma yönetimi için Git ile API Management hizmetini kullanmayla ilgili belgelere bakın.
OpenAPI içeri aktarma yoluyla yeni API ekleme
OpenAPI belgesinde bulunan her işlem için aşağıdakilerle yeni bir işlem oluşturulur:
Azure kaynak adı olarak
operationId
ayarlanır.operationId
değeri normalleştirilir.- Belirtilmezse (mevcut değilse,
null
veya boşsaoperationId
), HTTP yöntemi ve yol şablonu birleştirilerek Azure kaynak adı değeri oluşturulur.- Örneğin,
get-foo
.
- Örneğin,
Görünen ad olarak
summary
ayarlanır.summary
değer:- Olduğu gibi içeri aktarıldı.
- Uzunluk 300 karakterle sınırlıdır.
- Belirtilmezse
summary
(mevcut değilse,null
veya boşsa), görünen ad değeri olarakoperationId
ayarlanır.
için normalleştirme kuralları operationId
- Küçük harfe dönüştürün.
- Alfasayısal olmayan karakterlerin her dizisini tek bir tireyle değiştirin.
- Örneğin,
GET-/foo/{bar}?buzz={quix}
içineget-foo-bar-buzz-quix-
dönüştürülür.
- Örneğin,
- Her iki tarafta da tireleri kırpın.
- Örneğin,
get-foo-bar-buzz-quix-
get-foo-bar-buzz-quix
- Örneğin,
- Bir kaynak adı için en fazla sınırdan dört karakter daha az olmak üzere 76 karakter sığacak şekilde kırpın.
- Yinelenenleri kaldırma soneki için gerekirse biçiminde
-1, -2, ..., -999
kalan dört karakteri kullanın.
OpenAPI içeri aktarma yoluyla mevcut BIR API'yi güncelleştirme
İçeri aktarma sırasında mevcut API işlemi:
- OpenAPI belgesinde açıklanan API ile eşleşecek değişiklikler.
- Değerini mevcut işlemin Azure kaynak adıyla karşılaştırarak OpenAPI belgesindeki bir işlemle eşleşir
operationId
.- Eşleşme bulunursa, mevcut işlemin özellikleri "yerinde" güncelleştirilir.
- Eşleşme bulunamazsa:
- HTTP yöntemi ve yol şablonu birleştirilerek yeni bir işlem oluşturulur; örneğin,
get-foo
. - Her yeni işlem için içeri aktarma işlemi, aynı HTTP yöntemi ve yol şablonuyla mevcut bir işlemden ilke kopyalamayı dener.
- HTTP yöntemi ve yol şablonu birleştirilerek yeni bir işlem oluşturulur; örneğin,
Tüm mevcut eşleşmeyen işlemler silinir.
İçeri aktarmayı daha öngörülebilir hale getirmek için şu yönergeleri izleyin:
- Her işlem için özellik belirtin
operationId
. - İlk içeri aktarma işleminden sonra değişiklik yapmaktan
operationId
kaçının. - Hiçbir zaman ve HTTP yöntemi veya yol şablonunu aynı anda değiştirmeyin
operationId
.
için normalleştirme kuralları operationId
- Küçük harfe dönüştürün.
- Alfasayısal olmayan karakterlerin her dizisini tek bir tireyle değiştirin.
- Örneğin,
GET-/foo/{bar}?buzz={quix}
içineget-foo-bar-buzz-quix-
dönüştürülür.
- Örneğin,
- Her iki tarafta da tireleri kırpın.
- Örneğin,
get-foo-bar-buzz-quix-
get-foo-bar-buzz-quix
- Örneğin,
- Bir kaynak adı için en fazla sınırdan dört karakter daha az olmak üzere 76 karakter sığacak şekilde kırpın.
- Yinelenenleri kaldırma soneki için gerekirse biçiminde
-1, -2, ..., -999
kalan dört karakteri kullanın.
API'leri OpenAPI olarak dışarı aktarma
Her işlem için şu şekildedir:
- Azure kaynak adı olarak
operationId
dışarı aktarılır. - Görünen ad olarak
summary
dışarı aktarılır.
normalleştirme işleminin operationId
dışarı aktarmada değil, içeri aktarmada yapıldığını unutmayın.
WSDL
WSDL dosyalarıyla SOAP doğrudan ve SOAP-REST API'leri oluşturabilirsiniz.
SOAP bağlamaları
- Yalnızca "belge" ve "değişmez değer" kodlama stilinin SOAP bağlamaları desteklenir.
- "rpc" stili veya SOAP Kodlama desteği yok.
İçeri aktarmalar ve eklemeler
wsdl:import
,xsd:import
vexsd:include
yönergeleri desteklenmez. Bunun yerine bağımlılıkları tek bir belgede birleştirin.WSDL dosyasında ,
xsd:import
ve bağımlılıklarını çözümlemek vexsd:include
birleştirmekwsdl:import
için açık kaynak bir araç için bu GitHub deposuna bakın.
WS-* belirtimleri
WS-* belirtimlerini içeren WSDL dosyaları desteklenmez.
Birden çok bölümü olan iletiler
Bu ileti türü desteklenmiyor.
WCF wsHttpBinding
- Windows Communication Foundation ile oluşturulan SOAP hizmetleri kullanmalıdır
basicHttpBinding
. wsHttpBinding
desteklenmez.
MTOM
- kullanan
MTOM
hizmetler çalışabilir . - Şu anda resmi destek sunulmaz.
Özyineleme
- Özyinelemeli olarak tanımlanan türler API Management tarafından desteklenmez.
- Örneğin, kendi dizilerine bakın.
Birden çok ad alanı
Şemada birden çok ad alanı kullanılabilse de, ileti bölümlerini tanımlamak için yalnızca hedef ad alanı kullanılabilir. Bu ad alanları, diğer giriş veya çıkış öğelerini tanımlamak için kullanılır.
Hedef dışındaki ad alanları dışarı aktarmada korunmaz. İleti bölümlerini diğer ad alanlarıyla tanımlayan bir WSDL belgesini içeri aktarabilirsiniz ancak tüm ileti bölümlerinde dışarı aktarma sırasında WSDL hedef ad alanı bulunur.
Birden çok uç nokta
WSDL dosyaları, bir veya daha fazla wsdl:service
öğeye göre birden çok hizmet ve wsdl:port
uç nokta (bağlantı noktası) tanımlayabilir. Ancak API Management ağ geçidi, istekleri yalnızca tek bir hizmete ve uç noktaya aktarıp ara sunucuya aktarabiliyor. WSDL dosyasında birden çok hizmet veya uç nokta tanımlanmışsa, wsdlSelector özelliğini kullanarak API'yi içeri aktarırken hedef hizmet adını ve uç noktayı tanımlayın.
İpucu
İstekleri birden çok hizmet ve uç nokta arasında yük dengelemek istiyorsanız yük dengeli bir arka uç havuzu yapılandırmayı göz önünde bulundurun.
Diziler
SOAP-REST dönüşümü yalnızca aşağıdaki örnekte gösterilen sarmalanmış dizileri destekler:
<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
Şu anda bilinen WADL içeri aktarma sorunu yoktur.