Apigee Edge belgelerini görüntülüyorsunuz.
.
Git:
Apigee X belgeleri. bilgi
Bu konuda, politika bileşimini kullanarak nasıl karma oluşturacağınızı öğreneceksiniz. Politika yapısı, birden fazla arka uçtan gelen sonuçları birleştirmenizi sağlayan bir Apigee proxy kalıbıdır hedefleri tek bir yanıtta birleştirmesini sağlar.
Politika yapısına genel bir bakış için "Politika yapısı kalıbı"na bakın API Proxy Tarif Defteri'ndeki hakkında daha fazla bilgi edinin.
Örnek kodu indirip deneyin
Bu tarif defteri örneği hakkında
Bu tarif defteri örneğinde, politika bileşimi adı verilen bir API proxy kalıbı gösterilmektedir. Bu kalıp, birden fazla arka uç kaynağından gelen verileri birleştirmek için bir yol (başka yöntemler de vardır) sağlar. Daha genel olarak ifade etmek gerekirse bu konu, politikaların birbiriyle nasıl bir araya getirilebileceğini ve istenen sonucu vermelidir. Bu modele ve ilgili diğer kalıplara genel bir bakış için bkz. API Proxy Tarif Defteri hakkında daha fazla bilgi edinin.
Burada açıklanan örnekte, bu iki ayrı reklamdan gelen verileri birleştirmek için politika yapısı kullanılmıştır. herkese açık API'ler:
- Google Coğrafi Kodlaması API: Bu API, adresleri (ör. "1600 Amphitheatre Parkway, Mountain View, CA") dönüştürür. coğrafi koordinatlar (ör. enlem 37.423021 ve boylam -122.083739) şeklinde belirtilir.
- Google Elevation API Bu API, yükseklik için dünya üzerindeki konumları sorgulamak üzere basit bir arayüz sağlar verileri. Bu örnekte, Geocoding API'den döndürülen koordinatlar giriş olarak kullanılacaktır API'ye ekleyin.
Uygulama geliştiriciler, bu API proxy'sini iki sorgu parametresiyle çağırır: posta kodu ve ülke Kimlik:
$ curl "http://{myorg}-test.apigee.net/policy-mashup-cookbook?country=us&postalcode=08008"
Yanıt, coğrafi konumla ilişkili coğrafi konumu (enlem/boylam) içeren bir JSON nesnesidir. sağlanan posta kodu bölgesinin merkezi, coğrafi olarak kodlanmış rakımla birlikte konum.
{ "ElevationResponse":{ "status":"OK", "result":{ "location":{ "lat":"39.7500713", "lng":"-74.1357407" }, "elevation":"0.5045232", "resolution":"76.3516159" } } }
Başlamadan önce
Politika yapısı modeline dair kısa bir genel bakış okumak için "Politika yapısı bileşim kalıbı" API Proxy Tarif Defteri'ndeki hakkında daha fazla bilgi edinin.
Bu tarif defteri örneğini incelemeden önce, bu temel kavramlara aşina olmanız gerekir: kavramlar:
- Politikaların ne olduğu ve proxy'lere nasıl ekleneceği. Politikaları iyi bir şekilde tanıtabilmek için Nedir? ne olur?
- Akışları yapılandırma bölümünde açıklandığı gibi, API proxy akışının yapısı. Akışlar politikaların bir API proxy'si tarafından yürütüldüğü sırayı belirtir. Bu örnekte politikalar oluşturulur ve API proxy'sinin akışına eklenir.
- API proxy projesinin dosya sisteminizde nasıl organize edildiği aşağıda açıklanmıştır: API proxy'si yapılandırma referansı. Bu tarif defteri konusu, yerel gelişimi (dosya bulut tabanlı geliştirmenin aksine, sistem tabanlı) API proxy'sini geliştirmeniz gerekir.
- API anahtarı doğrulamasını kullanma. Bu, verebileceğiniz en basit uygulama tabanlı güvenlik biçimidir yapılandırmanın üç yolu vardır. Daha fazla bilgi için API'yi inceleyin tuşlar. Ayrıca, Güvenli API anahtarlarını gerekli kılarak bir API'den yararlanma eğitimini inceleyebilirsiniz.
- XML çalışma bilgisi. Bu örnekte API proxy'sini oluşturuyoruz ve politikalarınızı kullanmanızı öneririz.
Örnek kodu indirdiyseniz bu e-postada ele alınan tüm dosyaları konusu mashup-policy-recipebook örnek klasöründe bulabilirsiniz. Aşağıdaki bölümler örnek kodu ayrıntılı olarak incelemelisiniz.
Her şeyi akışına bırakan biri
Politikalara geçmeden önce örneğimizin ana akışına göz atalım. API proxy'si. Aşağıda gösterilen akış XML'i bu proxy, kullanılan politikalar ve ve bu politikaların nerede çağrıldığı.
İndirilen örnekteki bu XML dosyasını
doc-samples/policy-mashup-cookbook/apiproxy/proxies/default.xml
<ProxyEndpoint name="default"> <Flows> <Flow name="default"> <Request> <!-- Generate request message for the Google Geocoding API --> <Step><Name>GenerateGeocodingRequest</Name></Step> <!-- Call the Google Geocoding API --> <Step><Name>ExecuteGeocodingRequest</Name></Step> <!-- Parse the response and set variables --> <Step><Name>ParseGeocodingResponse</Name></Step> <!-- Generate request message for the Google Elevation API --> <Step><Name>AssignElevationParameters</Name></Step> </Request> <Response> <!-- Parse the response message from the Elevation API --> <Step><Name>ParseElevationResponse</Name></Step> <!-- Generate the final JSON-formatted response with JavaScript --> <Step><Name>GenerateResponse</Name></Step> </Response> </Flow> </Flows> <HTTPProxyConnection> <!-- Add a base path to the ProxyEndpoint for URI pattern matching--> <BasePath>/policy-mashup-cookbook</BasePath> <!-- Listen on both HTTP and HTTPS endpoints --> <VirtualHost>default</VirtualHost> <VirtualHost>secure</VirtualHost> </HTTPProxyConnection> <RouteRule name="default"> <!-- Connect ProxyEndpoint to named TargetEndpoint under /targets --> <TargetEndpoint>default</TargetEndpoint> </RouteRule> </ProxyEndpoint>
Akış öğelerinin bir özetini burada bulabilirsiniz.
- <Request>: <İstek> öğe birkaç taneden oluşur <Step> öğeler. Her adımda, geri kalan adımlarda oluşturacağımız politikalardan biri . Bu politikalar bir istek mesajının oluşturulması, gönderilmesi ve yanıtı ayrıştırır. Bu konunun sonunda proje yöneticilerinin her birinin rolünü politikalar.
- <Response> - <Yanıt> öğesi, aynı zamanda <Steps>. Bu adımlarda, nihai URL'nin işlenmesinden ve hedef uç noktadan (Google Elevation API) gelen yanıttır.
- <HttpProxyConnection> - Bu öğe ile ilgili ayrıntıları belirtir uygulamaların bu API proxy'sine nasıl bağlanacağını belirten <BasePath> bu API çağrılacaktır.
- <RouteRule>: Bu öğe hemen ne olduğunu belirtir iletilerinin işlenmesine neden olur. Bu durumda, TargetEndpoint çağrılır. Bu önemli adımla ilgili ayrıntıları bu konunun ilerleyen bölümlerinde ele alacağız.
Politikaları oluşturma
Aşağıdaki bölümlerde bu politika yapısını oluşturan politikaların her biri ele alınmaktadır örneğine bakalım.
İlk AtaMessage'ı oluşturma politika
İlk AssignMessage politikası, bir istek mesajı oluşturur. Bu istek için gereken mesaj geliştirmenizi sağlar.
İlk olarak politika koduyla başlayalım. Ardından, bu kodun öğelerini daha ayrıntılı bir şekilde açıklayacağız.
bu XML dosyasını dosya içinde bulabilirsiniz.
doc-samples/policy-mashup-cookbook/apiproxy/policies/GenerateGeocodingRequest.xml
<AssignMessage name="GenerateGeocodingRequest"> <AssignTo createNew="true" type="request">GeocodingRequest</AssignTo> <Set> <QueryParams> <QueryParam name="address">{request.queryparam.postalcode}</QueryParam> <QueryParam name="region">{request.queryparam.country}</QueryParam> <QueryParam name="sensor">false</QueryParam> </QueryParams> <Verb>GET</Verb> </Set> <!-- Set variables for use in the final response --> <AssignVariable> <Name>PostalCode</Name> <Ref>request.queryparam.postalcode</Ref> </AssignVariable> <AssignVariable> <Name>Country</Name> <Ref>request.queryparam.country</Ref> </AssignVariable> </AssignMessage>
Aşağıda, bu politikadaki unsurların kısa bir açıklaması verilmiştir. Bu konuda daha fazla bilgi edinebilirsiniz Mesaj politikası
- <assignMessage name> - Bu politikaya bir ad verir. Adı Politikaya bir akışta referans verildiğinde kullanılır.
- <AssignTo> - GeocodingRequest adlı bir adlandırılmış değişken oluşturur. Bu değişken, web sunucusu tarafından arka uca gönderilecek Hizmet Çağrısı politikası.
- <QueryParams> -
arka uç API çağrısı. Bu durumda, Geocoding API'nin konumu bilmesi gerekir.
bir posta kodu ve ülke kimliğiyle ifade edilir. Uygulama kullanıcısı bu bilgileri sağlar ve
buradan ayıklayabiliriz.
sensor
parametresi, API için gereklidir ve şu şekildedir: kodunu burada false olarak kodlayıp doğru veya yanlış olarak tanımlayabiliriz. - <Verb> - Bu örnekte, biz API'ye gidin.
- <AssignVariable>: Bu değişkenler, biz aktarmalısınız. Bu örnekte, değişkenlere daha sonra yanıtta erişilecektir geri dönüyor.
İsteği ServiceCall ile birlikte gönder
Politika oluşturma sırasındaki bir sonraki adım ServiceCallout politikası oluşturmaktır. İlgili içeriği oluşturmak için kullanılan Aşağıda listelenen ServiceÇağrı politikası, Search Console'da oluşturduğumuz istek nesnesini önceki Ataması politikasını Google Geocoding hizmetine gönderir ve sonucu değişkeni kullanabilirsiniz.
Daha önce olduğu gibi, önce koda bakalım. Ayrıntılı bir açıklama aşağıda verilmiştir. Okuyabilirsiniz
bu politika hakkında daha fazla bilgiye Hizmet Açıklama Metninden ulaşabilirsiniz
politikasına tabidir. İndirilen örnekteki bu XML dosyasını
doc-samples/policy-mashup-cookbook/apiproxy/policies/ExecuteGeocodingRequest.xml
<ServiceCallout name="ExecuteGeocodingRequest"> <Request variable="GeocodingRequest"/> <Response>GeocodingResponse</Response> <HTTPTargetConnection> <URL>http://maps.googleapis.com/maps/api/geocode/json</URL> </HTTPTargetConnection> </ServiceCallout>
Aşağıda, bu politikanın unsurlarının kısa bir açıklaması verilmiştir.
- <ServiceCallout> - Önceki politikada olduğu gibi bu politikada da dokunun.
- <İstek değişkeni> - Bu, atamasına dokunun. Arka uç API'sine giden isteği içerir.
- <Response> - Bu öğe, yanıtın depolanır. Göreceğiniz gibi, bu değişkene daha sonra ExtractVariables politikası.
- <HTTPTargetConnection> - Arka ucun hedef URL'sini belirtir API'ye gidin. Bu durumda, API'nin JSON yanıtı döndüreceğini belirtiriz.
Şimdi iki politikamız var. Bunlardan biri, arka uç API'si (Google'ın Geocoding API) ve isteği gerçekten gönderen arka uç API'sini kullanın. Ardından, yanıtı ele alırız.
Yanıtı şununla ayrıştır: ExtractVariables
ExtractDeğişkenler politikası, Hizmet Çağrısı politikası tarafından alınan yanıt mesajı. ExtractDeğişkenleri, JSON veya XML ya da URI yollarından, HTTP üstbilgilerinden, sorgudan içerik ayıklamak için ve form parametrelerini dahil etmektir.
ExtractDeğişkenler politikasının listesini aşağıda bulabilirsiniz. Bu politikayla ilgili daha fazla bilgiyi şu adreste bulabilirsiniz:
Değişkenleri Ayıklayın
politikasına tabidir. İndirilen örnekteki bu XML dosyasını
doc-samples/policy-mashup-cookbook/apiproxy/policies/ParseGeocodingResponse.xml
<ExtractVariables name="ParseGeocodingResponse"> <Source>GeocodingResponse</Source> <VariablePrefix>geocoderesponse</VariablePrefix> <JSONPayload> <Variable name="latitude"> <JSONPath>$.results[0].geometry.location.lat</JSONPath> </Variable> <Variable name="longitude"> <JSONPath>$.results[0].geometry.location.lng</JSONPath> </Variable> </JSONPayload> </ExtractVariables>
ExtractVariable politikasının temel öğeleri şunlardır:
- <ExtractVariables name> - Politika adı yine bir akışta kullanıldığında politikaya atıfta bulunmalıdır.
- <Source> - Oluşturduğumuz yanıt değişkenini belirtir Hizmet Çağrısı politikası. Bu politika, verileri ayıklarken bu değişkendir.
- <VariablePrefix> - Değişken öneki, bu politikada oluşturulan diğer değişkenlerdir. Önek, ayrılmış adlar dışında herhangi bir ad olabilir Edge'in Önceden tanımlanmış değişkenler.
- <JSONPayload> - Bu öğe, belirler ve bunu adlandırılmış değişkenlere ekler. Aslında Coğrafi Kodlama API'si, enlem ve boylamdan daha fazla bilgiye sahip olabilir. Ancak, tek ihtiyacımız olan değerler bunlar. açıklayacağım. Geocoding API'nin döndürdüğü JSON oluşturma işleminin tamamını görebilirsiniz. API'nin dokümanlarına göz atın. geometri.location.lat ve geometry.location.lng değerleri, döndürülen JSON nesnesindeki birçok alandan ikisi.
Açıkça anlaşılmayabilir ancak ExtractVariables'in iki farklı değer ürettiğini Adları değişken öneki (coğrafi kod) ve gerçek değişken adları için geçerlidir. Bu değişkenler, ve bu bölüm, aşağıdaki talimatları uygulayarak proxy akışındaki diğer politikalarda bakın. Değişkenler şunlardır:
- geocoderesponse.latitude
- geocoderesponse.longitude
Artık işin büyük bir kısmı tamamlanmış durumda. Bir çerçeve oluşturan üç politikadan oluşan isteği gönderir, arka uç API'sini çağırır ve döndürülen JSON verilerini ayrıştırır. Son adımlarda, akışın bu bölümündeki verileri başka bir Atayan politikasına aktarmazsanız, API (Google Elevation API) gönderir ve birleştirilmiş verilerimizi uygulama geliştiricisine geri gönderir.
İkinciyi oluştur AttributionMessage ile istek
Aşağıdaki ödev atama politikası, ilk arka uçtan (Google ve bunları ikinci API'ye (Google Yükseklik). Daha önce de belirtildiği gibi, bu değişkenler Graphicresponse.latitude ve geocoderesponse.longitude.
İndirilen örnekteki bu XML dosyasını
doc-samples/policy-mashup-cookbook/apiproxy/policies/AssignElevationParameters.xml
<AssignMessage name="AssignElevationParameters"> <Remove> <QueryParams> <QueryParam name="country"/> <QueryParam name="postalcode"/> </QueryParams> </Remove> <Set> <QueryParams> <QueryParam name="locations">{geocoderesponse.latitude},{geocoderesponse.longitude}</QueryParam> <QueryParam name="sensor">false</QueryParam> </QueryParams> </Set> </AssignMessage>
Google Elevation API'yi incelediğinizde iki sorgu parametresi aldığını göreceksiniz.
İlkinin adı locations
ve değeri enlem ve boylamdır
(virgülle ayrılmış değerler). Diğer parametre sensor
. Bu parametre zorunludur ve
doğru veya yanlış olmasını sağlayabilirsiniz. Bu noktada unutulmaması gereken en önemli nokta,
mesajı için Hizmet Çağrısı gerekmez. İkinciyi çağırmamız gerekmiyor.
Proxy'nin kendisinden arka uç API'sini çağırabileceğimiz için bu noktada
TargetEndpoint. Bir düşünürseniz, Google Elevations olarak adlandırdığımız tüm verilere sahibiz.
API Bu adımda oluşturulan istek mesajı,
isteği, ana istek ardışık düzeni için oluşturulur ve böylece
ProxyEndpoint'i, bu API proxy'si için yapılandırılan RouteRule'u izleyerek TargetEndpoint'e yönlendirin.
TargetEndpoint, uzak API ile olan bağlantıyı yönetir. (Web sitenizin URL'sinin
elevation API, TargetEndpoint için HTTPConnection'da tanımlanmıştır. Elevation API'si
belgelerine göz atabilirsiniz. Daha önce depoladığımız QueryParams,
country
ve postalcode
artık gerekli olmadığı için bunları kaldırırız
burayı tıklayın.
Kısa duraklama: Akışa geri dön
Bu noktada, neden başka bir Hizmet Çağrısı politikası oluşturmadığımızı merak ediyor olabilirsiniz. Şu tarihten sonra:
başka bir mesaj oluşturduk. Bu mesaj hedefe nasıl gönderilir? Google
Elevation API mi? Yanıt <RouteRule> içindedir akış bileşenidir. <RouteRule>
<İstek> sonrasında kalan istek mesajlarının ne yapılacağını belirtir şuranın parçası:
akış yürütüldü. Bu <RouteRule> tarafından belirtilen TargetEndpoint anlatır
Mesajı teslim edecek API proxy'si
http://maps.googleapis.com/maps/api/elevation/xml
numaralı telefona.
Örnek API proxy'sini indirdiyseniz TargetProxy XML dosyasını dosyada bulabilirsiniz.
doc-samples/policy-mashup-cookbook/apiproxy/targets/default.xml
<TargetEndpoint name="default"> <HTTPTargetConnection> <!-- This is where we define the target. For this sample we just use a simple URL. --> <URL>http://maps.googleapis.com/maps/api/elevation/xml</URL> </HTTPTargetConnection> </TargetEndpoint>
Şimdi sadece Google Elevation API'den gelen yanıtı işlememiz gerekiyor ve tamamlandı.
Yanıtı XML'den şuna dönüştür: JSON
Bu örnekte, Google Elevation API'nin yanıtı XML olarak döndürülür. "Ekstra kredisi" yanıtı XML'den dönüştürmek için bileşik yapımıza bir politika daha ekleyelim. JSON biçiminde olmalıdır.
Bu örnekte, bir kaynak dosyasıyla GenerateResponse adlı JavaScript politikası kullanılmaktadır. JavaScript kodunu içeren bir dosyayı içerebilir. Aşağıda gösterilen: GenerateResponse politika tanımı:
<Javascript name="GenerateResponse" timeout="10000"> <ResourceURL>jsc://GenerateResponse.js</ResourceURL> </Javascript>
GenerateResponse.js kaynak dosyası,
gösterir. Bu kodu
doc-samples/policy-mashup-cookbook/apiproxy/resources/JSC/GenerateResponse.js
dosyası oluşturun.
Apigee, XML'yi JSON'ye dönüştürmek için kullanıma hazır bir politika (XMLToJSON) da sağlar. Şunları yapabilirsiniz:
Aşağıda gösterilen xmltojson
politikasını kullanmak için ProxyEndpoint'i düzenleyin
.
<XMLToJSON name="xmltojson"> <Options> </Options> <OutputVariable>response</OutputVariable> <Source>response</Source> </XMLToJSON>.
Örneği test etme
Henüz yapmadıysanız policy-mashup-cookbook örneği, Apigee Edge örnek deposundaki GitHub'daki doc-samples klasöründe bulabilirsiniz. Adil policy-mashup-recipebook klasöründeki BENİOKU dosyasında bulunan talimatları uygulayın. Alternatif olarak, şu sayfadaki kısa talimatları uygulayın: örnek API proxy'lerini kullanın.
Özetlemek gerekirse birleşik API'yi aşağıdaki gibi çağırabilirsiniz. {myorg} yerine kuruluş adı:
$ curl "http://{myorg}-test.apigee.net/policy-mashup-cookbook?country=us&postalcode=08008"
Yanıt, coğrafi olarak kodlanmış konumdaki yükseklikle birleştirilmiş şekilde gösterilir. Veriler de API proxy'sine bağlı politikalarla birleştirilmiş iki arka uç API'sinden alınır ve tek bir yanıtta müşteriye iletilecektir.
{ "country":"us", "postalcode":"08008", "elevation":{ "meters":0.5045232, "feet":1.6552599030345978 }, "location":{ "latitude":39.75007129999999, "longitude":-74.1357407 } }
Özet
Bu tarif defteri konusunda, mashup oluşturmak için politika bileşimi modelinin nasıl kullanılacağı açıklanmaktadır. verileri karşılaştırabilirsiniz. Politika yapısı, API'de yaygın olarak kullanılan bir kalıptır proxy geliştirmeyi öğreneceksiniz.